Вы находитесь на странице: 1из 2

1A.

-
CREATE OR REPLACE VIEW EMPLEYDEPART(emp_no, apellido, dir, fecha_alt, salario,
comision, dnombre, loc) AS
SELECT emp_no, apellido, dir, fecha_alt, salario, comision FROM EMPLE e
NATURAL JOIN DEPART d WHERE (e.dept_no=d.dept_no AND e.salario>=0 AND
e.comision>=0);

1B.-
CREATE OR REPLACE TRIGGER gest_depart
INSTEAD OF UPDATE OR INSERT OR DELETE ON EMPLEYDEPART FOR EACH ROW
DECLARE dep_num NUMBER;
BEGIN
IF INSERTING THEN

INSERT INTO emple VALUES(:new.emp_no, :new.apellido, :new.dir, :new.fecha_alt,


:new.salario, :new.comision);

ELSEIF DELETING THEN


SELECT dept_no INTO dep_num FROM depart where dnombre=:old.dnombre;
DELETE FROM depart WHERE dept_no = dep_num;
ELSEIF UPDATING ('dnombre') THEN
SELECT dept_no INTO dep_num FROM depart where dnombre=:old.dnombre;
UPDATE depart SET dnombre = :new.dnombre where dept_no=dep_num;
END IF;
END;

2.-
CREATE OR REPLACE PROCEDURE consulta_depart (consulta varchar2) AS
TYPE CUR_TYP IS REF CURSOR;
c1 CUR_TYP;
fila depart%ROWTYPE;
BEGIN
IF (SUBSTR(consulta, 1, 1)=='s') THEN
OPEN c1 FOR consulta
LOOP
FETCH c1 INTO fila;
DBMS_OUTPUT.PUT_LINE(fila);
EXIT WHEN c1%NOTFOUND;
END LOOP;
CLOSE c1;
ELSE
EXECUTE INMEDIATE consulta;
END IF;
END;

3.- CREATE OR REPLACE FUNCTION EJ3 RETURN VARCHAR2 IS


DECLARE
suma NUMBER;
TYPE t_emple IS TABLE OF emple%ROWTYPE;
empleados t_emple;
BEGIN
SELECT * BULK COLLECT INTO empleados FROM emple;
FOR i IN empleados.first..empleados.last
LOOP
IF (empleados(i).comision=0) THEN
DELETE (i);
END IF;
END LOOP;
suma=0;
FOR i IN empleados.first..empleados.last
LOOP
suma=suma+empleados(i).salario;
DBMS_OUTPUT.PUT_LINE(suma);
END LOOP;
RETURN suma;
END EJ3;

Вам также может понравиться