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.
|
1 2 3 4 5 6 |
begin DBMS_OUTPUT.PUT_LINE('Hola mundo'); end; / |
2. Declarar una variable numerica y mostrar si es mayor de 10 o no.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
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.
|
1 2 3 4 5 6 |
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.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
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.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
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.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
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.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
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.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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?¿