我想在Oracle 11g中创建一个触发器,当BATCHTYPE列的值等于'STANDARD'时,当一行插入到表DLGPROD.INV_CHEMICAL时会触发该触发器。
触发器将执行名为SYS.STDEMAIL
的PL / SQL程序当我尝试调用STDEMAIL程序时,我得到PLS-00331非法引用。
我很擅长使用触发器或PL / SQL,我无法弄清楚如何告诉触发器#1 - 仅在更新行时触发并且BATCHTYPE列值为“STANDARD”,并且#2 - 如何正确调用属于SYS模式的名为STDEMAIL的PL / SQL程序。
非常感谢任何协助。
答案 0 :(得分:0)
来自文档(http://docs.oracle.com/cd/B10501_01/appdev.920/a96590/adg13trg.htm)
#1在这里,您可以看到Emp_tab
是您正在观看的表格,Sal
是一列。使用new
中的new.Sal
关键字,您可以检查新插入的值。
CREATE OR REPLACE TRIGGER Log_salary_increase
AFTER UPDATE ON Emp_tab
FOR EACH ROW
WHEN (new.Sal > 1000)
BEGIN
INSERT INTO Emp_log (Emp_id, Log_date, New_salary, Action)
VALUES (:new.Empno, SYSDATE, :new.SAL, 'NEW SAL');
END;
#2您可以使用call
关键字执行现有程序
CREATE OR REPLACE TRIGGER logontrig AFTER LOGON ON DATABASE
-- Just call an existing procedure. The ORA_LOGIN_USER is a function
-- that returns information about the event that fired the trigger.
CALL foo (ora_login_user)
/