Hola a todos, hoy os dejo una serie de ejercicios sobre la base de datos oracle.
Todos los ejercicios que proponemos están resueltos en este mismo post, intenta hacerlo por ti mismo y si te quedas atascado puedes mirar la solución. Recuerda, que no tiene por que estar igual tu solución con la del post, el objetivo es que aprendas no que me copies la solución.
Aquí te dejo la base de datos de jardinería que debes importar
Os dejo el modelo Entidad – Relación de la base de datos:

1. Mostrar ‘Hola mundo’ por pantalla.
Spoiler Inside |
SelectShow> |
begin
DBMS_OUTPUT.PUT_LINE('Hola mundo');
end;
/
|
2. Declarar una variable numerica y mostrar si es mayor de 10 o no.
Spoiler Inside |
SelectShow> |
declare
mi_numero number(8) := 12;
begin
if (mi_numero > 10) then
DBMS_OUTPUT.PUT_LINE('Mi numero es mayor de 10');
else
DBMS_OUTPUT.PUT_LINE('Mi numero es menor de 10');
end if;
end;
/
|
3. Declarar una variable numerica y pedir su valor y mostrarlo.
Spoiler Inside |
SelectShow> |
declare
mi_numero number(8) := №
begin
DBMS_OUTPUT.PUT_LINE('el valor introducido es ' || mi_numero);
end;
/
|
4. Mostrar los numeros del 1 al 100 con un while.
Spoiler Inside |
SelectShow> |
declare
i number(8) := 1;
begin
while (i<=10)
loop
DBMS_OUTPUT.PUT_LINE(i);
i := i+1;
end loop;
end;
/
|
5. Mostrar los numeros del 1 al 100 con un for.
Spoiler Inside |
SelectShow> |
begin
for i in 1..10
loop
DBMS_OUTPUT.PUT_LINE(i);
end loop;
end;
/
-- De 10 a 1
begin
for i in reverse 1..10
loop
DBMS_OUTPUT.PUT_LINE(i);
end loop;
end;
/
|
6. Mostrar los numeros del 1 al 100 con un loop.
Spoiler Inside |
SelectShow> |
declare
i number(8) := 1;
begin
loop
DBMS_OUTPUT.PUT_LINE(i);
exit when i=10;
i := i+1;
end loop;
end;
/
|
7. Mostrar el nombre de un cliente dado su codigo.
Spoiler Inside |
SelectShow> |
declare
v_codigocliente clientes.codigocliente%type := &codigo;
v_nombrecliente clientes.nombrecliente%type;
begin
select nombrecliente into v_nombrecliente
from clientes
where codigocliente = v_codigocliente;
DBMS_OUTPUT.PUT_LINE('El nombre del cliente es ' || v_nombrecliente);
end;
/
|
8. Mostrar el precioVenta y la gama de un producto dado su codigo.
Spoiler Inside |
SelectShow> |
declare
v_codigoproducto productos.codigoproducto%type := &codigo;
v_nombreproducto productos.nombre%type;
v_gamaproducto productos.gama%type;
begin
select nombre, gama into v_nombreproducto, v_gamaproducto
from productos
where codigoproducto = v_codigoproducto;
DBMS_OUTPUT.PUT_LINE('El nombre del producto es ' || v_nombreproducto
|| ' y su gama es ' || v_gamaproducto);
end;
/
|
9. Mostrar toda la informacion de un pedido dado su codigo (fechaEsperada, fechaEntrega, fechapedido, estado, comentarios)
Spoiler Inside |
SelectShow> |
declare
v_codigopedido pedidos.codigopedido%type := &codigo;
v_pedido pedidos%rowtype;
begin
select * into v_pedido
from pedidos
where codigopedido = v_codigopedido;
DBMS_OUTPUT.PUT_LINE('La fecha de pedido es ' || v_pedido.fechapedido
|| ', la fecha esperada es ' || v_pedido.fechaesperada
|| ', la fecha de entrega es ' || v_pedido.fechaentrega
|| ', el estado es ' || v_pedido.estado
|| ' y los comentarios son ' || v_pedido.comentarios
);
end;
/
|
10. Realizar una función que me devuelva la suma de pagos que ha realizado. Pasa el codigo por parametro.
Spoiler Inside |
SelectShow> |
create or replace function Pagos_cliente(v_codigocliente clientes.codigocliente%type)
return Number
as
v_sumapagos pagos.cantidad%type := 0;
begin
select sum(cantidad) into v_sumapagos
from pagos
where codigocliente = v_codigocliente;
return v_sumapagos;
end;
/
declare
v_codigocliente clientes.codigocliente%type := &codigo;
v_suma pagos.cantidad%type;
begin
v_suma := Pagos_cliente(v_codigocliente);
DBMS_OUTPUT.PUT_LINE('La suma de pagos es ' || v_suma);
end;
/
|
11. Realizar un método o procedimiento que muestre el total en euros de un pedido, pasale el codigo por parametro.
Spoiler Inside |
SelectShow> |
create or replace procedure total_pedido(v_codigopedido pedidos.codigopedido%type)
as
v_total number(8) := 0;
begin
select sum(dp.cantidad * dp.PRECIOUNIDAD) into v_total
from pedidos p, detallepedidos dp
where p.codigopedido = dp.codigopedido and p.codigopedido = v_codigopedido;
DBMS_OUTPUT.PUT_LINE('El pedido total es ' || v_total);
end;
/
declare
v_codigopedido pedidos.codigopedido%type := &codigo;
begin
total_pedido(v_codigopedido);
end;
/
|
12. Mostrar el nombre de un cliente dado su codigo. Controla en caso de que no se encuentre, mostrando un mensaje por ejemplo.
Spoiler Inside |
SelectShow> |
declare
v_codigocliente clientes.codigocliente%type := &codigo;
v_nombrecliente clientes.nombrecliente%type;
begin
select nombrecliente into v_nombrecliente
from clientes
where codigocliente = v_codigocliente;
DBMS_OUTPUT.PUT_LINE('El nombre del cliente es ' || v_nombrecliente);
exception
when no_data_found then
DBMS_OUTPUT.PUT_LINE('No existe el cliente');
end;
/
|
13. Realizar una función que me devuelva la suma de pagos que ha realizado. Pasa el codigo por parametro. Controla en caso de que no se encuentre, en ese caso devuelve un -1.
Spoiler Inside |
SelectShow> |
create or replace function Pagos_cliente(v_codigocliente clientes.codigocliente%type)
return Number
as
v_sumapagos pagos.cantidad%type := 0;
begin
select sum(cantidad) into v_sumapagos
from pagos
where codigocliente = v_codigocliente;
if v_sumapagos is null then
raise no_data_found;
else
return v_sumapagos;
end if;
exception
when no_data_found then
return -1;
end;
/
declare
v_codigocliente clientes.codigocliente%type := &codigo;
v_suma pagos.cantidad%type;
begin
v_suma := Pagos_cliente(v_codigocliente);
if v_suma = -1 then
DBMS_OUTPUT.PUT_LINE('El cliente no existe');
else
DBMS_OUTPUT.PUT_LINE('La suma de pagos es ' || v_suma);
end if;
end;
/
|
14. Realizar una función que devuelva el total en euros de un pedido, pasale el codigo por parametro. Controla en caso de que no se encuentre, en ese caso devuelve un 0. Pasale otro parametro, si supera ese limite, lanzaremos una excepcion propia y devolveremos un 0.
Spoiler Inside |
SelectShow> |
create or replace function total_pedido_func
(v_codigopedido pedidos.codigopedido%type, v_limite number)
return number
as
v_total number(8) := 0;
limite_superado exception;
begin
select sum(dp.cantidad * dp.PRECIOUNIDAD) into v_total
from pedidos p, detallepedidos dp
where p.codigopedido = dp.codigopedido and p.codigopedido = v_codigopedido;
if v_total is null then
raise no_data_found;
else
if v_limite < v_total then
raise limite_superado;
else
return v_total;
end if;
end if;
exception
when no_data_found then
return -1;
when limite_superado then
DBMS_OUTPUT.PUT_LINE('Limite superado');
return 0;
end;
/
declare
v_codigopedido pedidos.codigopedido%type := &codigo;
v_total number(8);
v_limite number(8) := &limite;
begin
v_total := total_pedido_func(v_codigopedido , v_limite);
if v_total = -1 then
DBMS_OUTPUT.PUT_LINE('no existe el pedido');
else
DBMS_OUTPUT.PUT_LINE('El pedido total es ' || v_total);
end if;
end;
/
|
18. Crear un cursor para ver todos los clientes que no hayan hecho pagos. Hazlo con un loop.
Spoiler Inside |
SelectShow> |
declare
v_nombrecliente clientes.nombrecliente%type;
cursor clientes_sin_pagos_cursor is
select nombrecliente
from clientes c
where not exists(select codigocliente from pagos where codigocliente = c.codigocliente);
begin
open clientes_sin_pagos_cursor;
loop
fetch clientes_sin_pagos_cursor into v_nombrecliente;
exit when clientes_sin_pagos_cursor%notfound;
dbms_output.put_line(v_nombrecliente);
end loop;
close clientes_sin_pagos_cursor;
end;
/
|
19. Crear un cursor para ver todos los clientes que no hayan hecho pagos. Hazlo con un for.
Spoiler Inside |
SelectShow> |
declare
cursor clientes_sin_pagos_cursor is
select nombrecliente
from clientes c
where not exists(select codigocliente from pagos where codigocliente = c.codigocliente);
begin
for registro in clientes_sin_pagos_cursor loop
dbms_output.put_line(registro.nombrecliente);
end loop;
end;
/
|
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Buenas tardes.
Llevo días intentando descargar la base de datos de jardinería pero es imposible entre tanta publicidad, no hay manera. ¿Se puede conseguir de algún otro modo? Entre ventanas emergentes, solicitud de notificaciones… nunca llego a acceder al archivo ni siquiera aceptándolas.
Muy buenas mira, sigo tu curso online pero tengo un problema al intentar cargar la base de datos en mi oracle10g. no hay manera, me dice El archivo de exportación no está soportado. aunque importar, es un rollo, y por codigo sql tampoco me lo coge, tienes algun sitio donde explicas eso?
La base de datos debes abrirlo como bloc de notas, luego lo copias a sql developer y te coge de maravilla
Podrías poner también la base de datos de concesionario por aquí, que me ha costado más de lo debido encontrarla. Por lo demás, gran trabajo!!
Hola! En el ejercicio 8, al insertar el código del producto, cuando el código lleva guiones da un error. Sin embargo con los números enteros, sin guiones funciona bien.
Como se podría arreglar?¿