sql >> Base de Datos >  >> RDS >> Oracle

Desencadenador de Oracle en tabla anidada

No puede definir un disparador como "ANTES DE LA ACTUALIZACIÓN EN Museum.EmployeeList.birthdate", pero puede escribir un disparador normal ANTES DE LA ACTUALIZACIÓN EN Museum y en el cuerpo del disparador puede recorrer todos los empleados que verifican la fecha.

Prueba este:

CREATE OR REPLACE TRIGGER BUIR_Museum 
    BEFORE INSERT OR UPDATE ON Museum
    FOR EACH ROW

BEGIN
    IF :NEW.EmployeeList IS NOT NULL THEN
        FOR i IN :NEW.EmployeeList.FIRST..:NEW.EmployeeList.LAST LOOP
            IF :NEW.EmployeeList(i).birthdate > SYSDATE THEN
                RAISE_APPLICATION_ERROR(-20029, 'Invalid birthday');
            END IF;
        END LOOP;
    END IF;
END;