编写:procedure  tjzf 如下:create or replace procedure tjzf is
begin
insert into test(zs) select count(*) from sfgl_zhlb;
commit;
end tjzf;编写:trigger zftj  主要调用上面的proceduce tjzf 然后将数据插入到表test中 如下:
create or replace trigger zftj
  after insert on sfgl_zhlb  
  for each row
declare
  -- local variables here
begin
  tjzf;
end zftj;当在表sfgl_zhlb进行插入数据时,总是报错:ora-00900 错误,这个问题比较简单,不知哪儿错了,我是新手,请大家指点,谢谢!

解决方案 »

  1.   

    将存储过程中的commit一行去掉
      

  2.   

    commit一行去掉也不行,还是报错
      

  3.   

    不要用存储过程,直接在触发器中写create or replace trigger zftj
      after insert on sfgl_zhlb  
      for each row
    declare
      -- local variables here
    begin
      insert into test(zs) select count(*) from sfgl_zhlb;
    end zftj;
      

  4.   

    在过程中了commit;  在触发器中不允许用commit的. 如果要在触发器中调用过程,要用自治事务的吧,或者象楼上,把业务放在触发器中处理.
      

  5.   

    8i触发器中不允许用commit
    9i据说就可以了。
      

  6.   

    不要用存储过程,直接在触发器中写 如freddy2003() 所说,也不对。报的错还是ora-00900错误。
     dinya2003(OK) 说的如果要在触发器中调用过程,要用自治事务的吧,什么是自治事务?如果按照我最初的做法,应该如何修改,即用触发器调用过程的方法。
      

  7.   

    变异表的问题,你的触发器是基于表sfgl_zhlb的行级触发器,所以在触发其中不能对表sfgl_zhlb进行select
      

  8.   

    你为什么要这样做呢,为什么不用统计表中的数据来+1更新呢,这样也不用再count了,也避免了速度问题了!
       update test set zs=zs+1;
    不就可以了嘛!
    自治事务是在开始加上一句话就可以了,具体也忘记怎么写了,呵呵,看下帮助了!
      

  9.   

    请问:pengchen617() 那如何解决 行级触发的问题?
    要实现我说的功能,该如何实现?
    回 lialin(阿林)  我的最终应用没有这么简单,只是把这个问题简单化了,
    我想统计的数据还有很多项,既有insert也有update,所以不能简单地用update test set zs=zs+1;
    再帮我想想办法?
    谢谢各位,问题解决了再加分。
      

  10.   

    就你的要求,用行级触发不能解决,这是Oracle行级触发的规定。
      

  11.   

    请问:qiyousyc(沈阳棋友)怎样设置后触发。先谢谢