公司一触发器a的代码已经超过8000,系统提示代码过长编译错误.
目前的做法是分拆成两个做法.a,a1出于成本考虑,我想将它改写成触发器  将a1 改写为过程 prod_a1(a in char,.....  ,  g  out int)其中g 为0/1  0 代表过程中无任一模块发生异常,1 代表有  (目前不用,只是作为扩展功能预留的)我现在不知道触发器要怎么调用外部过程,并得到返回值???请大哥多教教.

解决方案 »

  1.   

    那很简单呀,
    create or replace trigger a
      before ... on ....
    declare
      g int;
      a varchar2;
    .....
    begin
    .........(把你的参数赋值)
      prod_a1(a,..... , g)
    if g=1 then
    ...
    end if;
    .......
    end a;直接把存储过程放在那里就行了,输出参数执行完了就能用
      

  2.   

    1  create or replace procedure p_test(id number,name out varchar2) as
      2  begin
      3  dbms_output.put_line('p_test executed');
      4  name :='rr';
      5* end;
    SQL> /过程已创建。
    SQL> create or replace trigger t_test before insert on test
      2  declare
      3  v_name varchar2(20);
      4  begin
      5  p_test(1,v_name);
      6  dbms_output.put_line('trigger executed');
      7  end;
      8  /触发器已创建SQL> insert into test values(5,'ggg');已创建 1 行。SQL> set serveroutput on
    SQL> insert into test values(5,'ggg');
    p_test executed
    trigger executed已创建 1 行。SQL>