繁体   English   中英

如何在 oracle 中调用触发器 function

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM