在将行插入表时创建Oracle Trigger以执行PL / SQL程序

时间:2015-03-26 19:15:53

标签: oracle plsql oracle11g

我想在Oracle 11g中创建一个触发器,当BATCHTYPE列的值等于'STANDARD'时,当一行插入到表DLGPROD.INV_CHEMICAL时会触发该触发器。

触发器将执行名为SYS.STDEMAIL

的PL / SQL程序

当我尝试调用STDEMAIL程序时,我得到PLS-00331非法引用。

我很擅长使用触发器或PL / SQL,我无法弄清楚如何告诉触发器#1 - 仅在更新行时触发并且BATCHTYPE列值为“STANDARD”,并且#2 - 如何正确调用属于SYS模式的名为STDEMAIL的PL / SQL程序。

非常感谢任何协助。

1 个答案:

答案 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)
/