【问题标题】:Execute procedure in a trigger在触发器中执行过程
【发布时间】:2010-12-15 03:05:43
【问题描述】:

是否可以在触发器中执行存储过程?

谢谢

【问题讨论】:

  • 如果我自己执行它,那么它会起作用。我想创建一个触发器,当字段中有值时它将执行它

标签: sql oracle stored-procedures execute


【解决方案1】:

在 SQL Server 中是这样。您使用的是什么 DBMS?

ETA:甲骨文,嗯?我没有个人经验,但this 似乎表明你可以。我通过谷歌搜索“oracle 触发器存储过程”找到了它。

【讨论】:

    【解决方案2】:

    是的,像这样:

    create or replace trigger trg
    after insert on emp
    for each row
    begin
       myproc(:new.empno, :new.ename);
    end;
    

    【讨论】:

    • 什么是:new.empno? [意思是:新的?]
    • @Freelancer:在 Oracle 行级触发器中,您可以使用 :old 和 :new 引用触发语句效果之前和之后的列值。这是一个行级触发器,我刚刚添加了缺少的for each row 部分。
    • 令我惊讶的是,将近 4 年之后,没有人指出我原始答案中的错误(缺少的 for each row)!
    • @PieterDeBie,确实没有执行语句。 execute immediate 将用于动态运行过程。即,如果您在触发器触发之前不知道要运行的过程的名称 - 这不是典型的。
    • myproc(:new.empno, :new.ename); 是什么意思
    【解决方案3】:

    是的,你可以。请记住,触发器可以针对受 DML 触发器影响的每一行触发。所以你的存储过程应该被优化,否则你可能会遇到性能问题。触发器是个好东西,但您只需要记住使用它们时可能出现的性能问题。

    【讨论】:

      【解决方案4】:

      是的,您可以从触发器触发过程。 但是,请记住触发器和程序 e 不应访问同一个表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-30
        • 1970-01-01
        • 2020-02-13
        • 2019-03-25
        相关资源
        最近更新 更多