[英]how to call trigger function in oracle
如何在 oracle 中调用单独的触发器 function。 我知道在 postgres 中调用触发器 function 的语法是
create OR replace trigger_test
after update or delete on person_info
FOR EACH ROW EXECUTE FUNCTION trig_function();
同样在 postgres 中,我可以在 function trig_function() 中获取表 person_info 的所有旧值和新值。
有没有办法在 oracle 中模拟相同的东西,因为我发现有关触发器的文档与 postgres 触发器有点对比。
在 Oracle 中,触发器是一个整体条目,由 header ( CREATE OR REPLACE TRIGGER...
) 和一个在触发事件发生时调用的 PL/SQL 块组成。 一个例子是:
CREATE OR REPLACE TRIGGER EMPLOYEES_BIU
BEFORE INSERT OR UPDATE ON EMPLOYEES
FOR EACH ROW
DECLARE -- This is only included to demonstrate that
nSome_variable NUMBER; -- you can include a DECLARE section.
BEGIN
IF INSERTING THEN
:NEW.ADD_DATE := SYSDATE;
:NEW.ADD_USER := UID;
ELSIF UPDATING THEN
:NEW.ADD_DATE := :OLD.ADD_DATE;
:NEW.ADD_USER := :OLD.ADD_USER;
:NEW.MTC_DATE := SYSDATE;
:NEW.MTC_USER := UID;
END IF;
END EMPLOYEES_BIU;
旧值和新值可通过伪行:OLD
和:NEW
获得。
我希望您尝试从触发器中调用 function。 如果是这种情况,那么您可以执行类似的操作
create or replace trigger trigger_test
after update or delete on person_info
for each row
declare
c_person person_info<specify your type>%TYPE
begin
if trig_function(:NEW.person) != c_person; -- not sure what your function returns
--your logic here
end if;
end;
/
或者你可以做类似的事情
create or replace trigger trigger_test
after update or delete on person_info
for each row
begin
if trig_function(:NEW.person) != "ABC" ---- not sure what your function returns
----implement your logic with the function
end if;
end;
/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.