【问题标题】:Oracle Trigger on Nested Table嵌套表上的 Oracle 触发器
【发布时间】:2016-11-01 03:29:36
【问题描述】:
我想创建一个触发器来验证出生日期,例如它不是> 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。
【问题讨论】:
标签:
oracle
triggers
nested
【解决方案1】:
您不能定义像“在 Museum.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;