嵌套表上的Oracle触发器

时间:2013-11-27 02:27:38

标签: oracle triggers nested

我想创建一个触发器来验证出生日期,例如它不是> SYSDATE:

Employee -- STRUCTURED TYPE
{
     name VARCHAR2(10)
     lastname VARCHAR(10)
     birthdate DATE
}

Employee_List TABLE OF Employee -- NESTED TABLE

Museum -- TABLE
{
     id NUMBER
     EmployeeList Employee_List
}

我正在使用Oracle 10g。

1 个答案:

答案 0 :(得分:1)

您无法定义类似“更新博物馆.EmployeeList.birthdate”之类的触发器 但是你可以在更新博物馆之前写一个普通的触发器,在触发器体中你可以循环检查日期的所有员工。

试试这个:

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;