Documentos de Académico
Documentos de Profesional
Documentos de Cultura
UD06 – PL-SQL
Realiza los siguientes ejercicios en PL-SQL, para ellos créalos en SQLDeveloped, cuando los
tengas creados guárdalos en este documento en los recuadros marcados o en un archivo.sql
con la nomenclatura UD06-001, UD06-002,…
Cuando los tengas todos resueltos envíalos en un archivo .zip con el nombre:
DAM-UD06-Apellidos, nombre-DNI.zip
DAM-UD06-Totana García, Luis Regino-48484848E.zip
DAW-UD06-Apellidos, nombre.zip
DAW-UD06-Totana García, Luis Regino-48484848E.zip
BEGIN
DBMS_OUTPUT.PUT_LINE('HOLA
MUNDO');
END;
DECLARE
NUMERO NUMBER:=2;
BEGIN
IF NUMERO>10 THEN
DBMS_OUTPUT.PUT_LINE('NUMERO MAYOR QUE 10');
ELSE
DBMS_OUTPUT.PUT_LINE('NUMERO MENOR QUE 10');
END IF;
END;
3. Declarar una variable numérica y pedir su valor y mostrarlo.
DECLARE
NUMERO NUMBER:=№
BEGIN
DBMS_OUTPUT.PUT_LINE('El numero es '||
NUMERO);
END;
4. Mostrar los números del 1 al 100 con un while.
DECLARE
NUMERO NUMBER:=1;
pág. 1
Desarrollo de Aplicaciones Multiplataforma – Bases de datos
BEGIN
WHILE(NUMERO<=100)
LOOP
DBMS_OUTPUT.PUT_LINE(NUMERO);
NUMERO:=NUMERO+1;
END LOOP;
END;
5. Mostrar los números del 1 al 100 con un for.
BEGIN
FOR NUMERO IN 1..100
LOOP
DBMS_OUTPUT.PUT_LINE(NUMERO);
END LOOP;
END;
6. Mostrar los números del 1 al 100 con un loop.
DECLARE
NUMERO NUMBER:=1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(NUMERO);
EXIT WHEN NUMERO=100;
NUMERO:=NUMERO+1;
END LOOP;
END;
7. Mostrar el nombre de un cliente dado su código.
DECLARE
V_CODIGOCLIENTE CLIENTE.CODIGO_CLIENTE%TYPE :=&CODIGO;
V_NOMBRECLIENTE CLIENTE.NOMBRE_CLIENTE%TYPE;
BEGIN
SELECT NOMBRE_CLIENTE INTO V_NOMBRECLIENTE
FROM CLIENTE
WHERE CODIGO_CLIENTE = V_CODIGOCLIENTE;
DBMS_OUTPUT.PUT_LINE('El cliente se llama '|| V_NOMBRECLIENTE);
END;
pág. 2
Desarrollo de Aplicaciones Multiplataforma – Bases de datos
DECLARE
V_CODIGOPRODUCTO PRODUCTO.CODIGO_PRODUCTO%TYPE :=&CODIGO;
V_NOMBREPRODUCTO PRODUCTO.NOMBRE%TYPE;
V_GAMAPRODUCTO PRODUCTO.GAMA%TYPE;
BEGIN
SELECT NOMBRE, GAMA INTO V_NOMBREPRODUCTO, V_GAMAPRODUCTO
FROM PRODUCTO
WHERE CODIGO_PRODUCTO = V_CODIGOPRODUCTO;
DBMS_OUTPUT.PUT_LINE('El nombre del producto es: '|| V_NOMBREPRODUCTO ||
' y su gama es ' ||V_GAMAPRODUCTO);
END;
9. Mostrar toda la información de un pedido dado su código (fechaEsperada, fechaEntrega,
fechapedido, estado, comentarios)
DECLARE
V_CODIGOPEDIDO PEDIDO.CODIGO_PEDIDO%TYPE :=&CODIGO;
V_PEDIDO PEDIDO%ROWTYPE;
BEGIN
SELECT * INTO V_PEDIDO
FROM PEDIDO
WHERE CODIGO_PEDIDO = V_CODIGOPEDIDO;
DBMS_OUTPUT.PUT_LINE('La fecha del pedido es: ' || v_pedido.fecha_pedido
|| ', la fecha esperada es: ' || v_pedido.fecha_esperada
|| ', la fecha de entrega es: '|| v_pedido.fecha_entrega
|| ', el estado es: '|| v_pedido.estado
pág. 3
Desarrollo de Aplicaciones Multiplataforma – Bases de datos
DECLARE
pág. 4
Desarrollo de Aplicaciones Multiplataforma – Bases de datos
pág. 5
Desarrollo de Aplicaciones Multiplataforma – Bases de datos
Pásale otro parámetro, si supera ese límite, lanzaremos una excepción propia y devolveremos
un 0.
pág. 6
Desarrollo de Aplicaciones Multiplataforma – Bases de datos
La función devolverá el número de filas actualizadas crea un bloque anónimo que ejecute la
función anterior y muestre el resultado devuelto por la función.
IF(limi<6000)THEN
UPDATE CLIENTES
SET LIMITECREDITO=6000
WHERE CODIGOCLIENTE=codCli;
ELSE
UPDATE CLIENTES
SET LIMITECREDITO=limite*1.10
WHERE CODIGOCLIENTE=codCli;
END IF;
resultado:=SQL%ROWCOUNT;
RETURN resultado;
END;
BEGIN
IF(ejercicio15(1,8000)>0)THEN
DBMS_OUTPUT.PUT_LINE('Se ha actualizado');
ELSE
DBMS_OUTPUT.PUT_LINE('No se ha actualizado');
END IF;
END;
SELECT * FROM CLIENTES
pág. 7
Desarrollo de Aplicaciones Multiplataforma – Bases de datos
I. mostrará el PRECIOVENTA
II. actualizará el PRECIOVENTA subiendo un 10%
III. devolverá en un parámetro de salida del procedimiento(ps_nuevo_precio) el precio
nuevo tras la actualización crea un bloque anónimo que llame al procedimiento
anterior y muestre el precio nuevo devuelto por el procedimiento.
UPDATE PRODUCTOS
SET PRECIOVENTA=PRECIOVENTA*1.1
WHERE CODIGOPRODUCTO=codProdu;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No se encuentran productos');
END;
declare
idProducto PRODUCTOS.CODIGOPRODUCTO%TYPE := 'FR-43';
precioVenta PRODUCTOS.PRECIOVENTA%TYPE :=100;
precioVentaAct PRODUCTOS.PRECIOVENTA%TYPE;
begin
ejercicio16(idProducto,precioVenta, precioVentaAct);
DBMS_OUTPUT.PUT_LINE(precioVentaAct);
end;
17. Crear un cursor para ver todos los clientes que no hayan hecho pagos. Hazlo con un loop.
DECLARE
V_NOMBRECLIENTE CLIENTE.NOMBRE_CLIENTE%TYPE;
pág. 8
Desarrollo de Aplicaciones Multiplataforma – Bases de datos
CURSOR CURSOR_CLIENTESINPAGO IS
SELECT NOMBRE_CLIENTE
FROM CLIENTE C
WHERE NOT EXISTS (SELECT CODIGO_CLIENTE
FROM PAGO
WHERE CODIGO_CLIENTE =C.CODIGO_CLIENTE);
BEGIN
OPEN CURSOR_CLIENTESINPAGO;
LOOP
FETCH CURSOR_CLIENTESINPAGO INTO V_NOMBRECLIENTE;
EXIT WHEN CURSOR_CLIENTESINPAGO%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(V_NOMBRECLIENTE);
END LOOP;
CLOSE CURSOR_CLIENTESINPAGO;
END;
18. Crear un cursor para ver todos los clientes que no hayan hecho pagos. Hazlo con un for.
DECLARE
CURSOR CURSOR_CLIENTESINPAGO IS
SELECT NOMBRE_CLIENTE
FROM CLIENTE C
WHERE NOT EXISTS (SELECT CODIGO_CLIENTE
FROM PAGO
WHERE CODIGO_CLIENTE =C.CODIGO_CLIENTE);
BEGIN
FOR
REGISTRO IN CURSOR_CLIENTESINPAGO LOOP
DBMS_OUTPUT.PUT_LINE(REGISTRO.NOMBRE_CLIENTE);
END LOOP;
END;
19.- Crear un cursor para ver todos los productos pedidos en un pedido. Muestra la cantidad
también
DECLARE
P_CODIGOPEDIDO PEDIDO.CODIGO_PEDIDO%TYPE:=&CODIGO;
BEGIN
pág. 9
Desarrollo de Aplicaciones Multiplataforma – Bases de datos
MOSTRARPRODUCTOPEDIDO(P_CODIGOPEDIDO);
END;
20.- Crear un cursor para ver todos los empleados de un jefe
pág. 10