定义了触发器
CREATE OR REPLACE TRIGGER wa_item_createitemview
--所属项目:工资管理
--使用说明:当表wa_item中增加或者删除记录时,触发过程pro_createitemview的执行
--by Lijm at 2006.11.8
AFTER INSERT or DELETE ON WA_ITEM
FOR EACH ROW
BEGIN
     pro_createitemview;
END;我在WA_ITEM增加或者删除了记录,可是为什么过程pro_createitemview没有被执行?

解决方案 »

  1.   

    过程pro_createitemview如下:
    create or replace procedure pro_CreateItemView
    --所属项目:工资管理项目
    --使用说明:在wa_item中增加或者删除记录后,触发器触发该过程执行,动态创建关于表wa_item的交叉视图;
    --by Lijm at 2006.11.5
    as
        ddl_sql varchar2(800);
    begin
        --对用户bizdata1授予创建视图的权限;
        execute immediate 'grant create view to bizdata1';
        
        --取得工资项目
        declare CURSOR c_test is select distinct a.S_ITEM_CODE from WA_ITEM a;
        begin         
             for v_test in c_test 
             loop   
                    --根据取得的工资项目,创建DDL语句的动态部分
                    ddl_sql := ddl_sql ||', SUM(CASE WHEN a.s_item_code = '||v_test.S_ITEM_CODE||' then a.n_item_value else 0 end) as item'||v_test.s_item_code;
             end loop; 
        end;    
        --整合DDL语句;
        ddl_sql:='create or replace view V_WA_Item as select a.s_wage_id ' || ddl_sql || ' from WA_DATA a group by a.s_wage_id --由pro_creatitemview动态创建';    --执行DDL语句;
        execute immediate ddl_sql;
        
        --如果意外则返回空;
        exception 
        when others then 
             null;
    end ;
      

  2.   

    该过程pro_createitemview用命令execute pro_createitemview调用没有问题,能够创建视图。
      

  3.   

    触发器重新再建立一遍试试啊~~~~~~然后查看ORACLE的日志,看有没有记录就可以知道有没有被触发了哈~
      

  4.   

    select * from sys.user_triggers t
    WHERE t.trigger_name ='WA_ITEM_CREATEITEMVIEW'
    察看触发器状态
      

  5.   

    触发器中做DDL,需要用自治事务。
      

  6.   

    由于你的过程中有
    exception 
        when others then 
             null;
    所以,执行DDL出错后什么也没做就返回触发器。实际上是触发器已经被触发。你把exception注释后再看看。