Soluciones bloques codigo
Enviado por josemalsy • 10 de Octubre de 2019 • Apuntes • 515 Palabras (3 Páginas) • 91 Visitas
1.- Codificar el programa PL/SQL que permita aumentar en un 10% el salario de un empleado cuyo número se introduce por teclado.
DECLARE
cursor cur1(argu1 number) IS
SELECT * FROM temple WHERE numem=argu1 FOR UPDATE OF salar;
registro cur1%ROWTYPE;
BEGIN
OPEN cur1(&Numero_empleado);
FETCH cur1 INTO registro;
UPDATE temple SET salar=salar*1.1 WHERE CURRENT OF cur1;
-- COMMIT;
CLOSE cur1;
END;
/
2.-Modificar el anterior programa para controlar la inexistencia del empleado tecleado, no haciendo nada, solo evitando que el programa finalice con error.
DECLARE
cursor cur1(argu1 number) is
SELECT * FROM temple WHERE numem=argu1 FOR UPDATE OF salar;
registro cur1%ROWTYPE;
NOEXISTE EXCEPTION;
BEGIN
OPEN cur1(&Numero_empleado);
FETCH cur1 INTO REGISTRO;
IF cur1%NOTFOUND
THEN RAISE NOEXISTE;
END IF;
UPDATE temple SET salar=salar*1.1 WHERE CURRENT OF cur1;
-- COMMIT;
CLOSE cur1;
EXCEPTION
WHEN NOEXISTE THEN
null;
END;
/
3.- Modificar el anterior programa de forma que si el empleado no existe se visualice un mensaje de error.
SET SERVEROUTPUT ON SIZE 5000
SET ECHO OFF
DECLARE
cursor cur1(argu1 number) IS
SELECT * FROM temple WHERE numem=argu1 FOR UPDATE OF salar;
registro cur1%ROWTYPE;
NOEXISTE EXCEPTION;
BEGIN
OPEN cur1(&Numero_empleado);
FETCH cur1 INTO registro;
IF cur1%notfound THEN
RAISE NOEXISTE;
END IF;
UPDATE temple SET salar=salar*1.1 WHERE CURRENT OF cur1;
CLOSE cur1;
EXCEPTION
WHEN NOEXISTE THEN
DBMS_OUTPUT.put_line('Empleado inexistente');
END;
/
4.- Codificar el programa PL/SQL que solicite por pantalla un número de departamento y calcule la suma total de los salarios y comisiones de ese departamento. Después inserte la tupla correspondiente en la tabla TOTALES, previamente creada con la siguiente estructura:
deptno number(3)
total number(10,2)
Realizar el ejercicio utilizando un bucle simple y tratando el cursor.
--CREATE TABLE TOTALES(deptno number(3), total number(10,2));
DECLARE
cursor cur1(argu1 number) is
SELECT numde, salar, comis FROM temple WHERE numde=argu1;
registro cur1%ROWTYPE;
acu number(10,2):=0;
BEGIN
OPEN cur1(&Numero_departamento);
LOOP
FETCH cur1 INTO registro;
EXIT WHEN cur1%NOTFOUND;
acu:=acu+registro.salar+nvl(registro.comis,0);
END LOOP;
INSERT INTO TOTALES VALUES(registro.numde, acu);
CLOSE cur1;
END;
/
SELECT * FROM TOTALES; -- Para comprobar como ha quedado la tabla totales
...