报什么错?
select count(*) into num from wang_road 
  where (w_crossid=:new.CrossingID) 
  and (lanename=:new.LaneName);
if num>0 then
我认为是没有必要的

解决方案 »

  1.   

    看不出这么写有什么意义,
    去掉for each row
      

  2.   

    楼主是不是报
    ORA-04082: NEW 或 OLD 引用不允许在表层触发器中
    的错误??这个错误是什么意思?
      

  3.   

    IF NUM>0 then 后面的WHERE条件语句可以不要了吧?你已经是将符合这个条件的记录筛选出来了再去UPDATE的。
    where (w_crossid=:new.CrossingID) 
          and (lanename=:new.LaneName);  还有我认为select count(*) into num from wang_road 
      where (w_crossid=:new.CrossingID) 
      and (lanename=:new.LaneName);
    if num>0 then
    我认为是没有必要的。
    其实写这个触发器的意义何在?
      

  4.   

    建立时的错误还是触发时的错误,
    加上new as new 好使不。
      

  5.   

    在触发的时候出错,比如修改自动pdcd的时候,错误提示:触发器"ITS"."LANECONFIGYANWUU" 无效且未通过重新确认
      

  6.   

    CREATE OR REPLACE TRIGGER "ITS"."LANECONFIGYANWUU" AFTER
    UPDATE OF "GLIGHTTIME", "PDCD", "PERIODTIME", "PHASEINFO" 
        ON "ITS"."LANECONFIG" 
        FOR EACH ROW 
    begin
    update wang_road
         set pdcd=:new.pdcd ,
             periodtime=:new.periodtime ,
             glighttime=:new.glighttime,
             PhaseInfo=:new.PhaseInf
          where (w_crossid=:new.CrossingID) and (lanename=:new.LaneName);  
    end
    ;
    这样也出现同样的错误
      

  7.   

    只是从你的语句上看不出来啥。去掉双引号看看,看看字段名是不是错了。
    CREATE OR REPLACE TRIGGER ITS.LANECONFIGYANWUU AFTER
    UPDATE OF GLIGHTTIME, PDCD, PERIODTIME, PHASEINFO 
        ON ITS.LANECONFIG 
        FOR EACH ROW 
    begin
    update wang_road
         set pdcd=:new.pdcd ,
             periodtime=:new.periodtime ,
             glighttime=:new.glighttime,
             PhaseInfo=:new.PhaseInf
          where (w_crossid=:new.CrossingID) and (lanename=:new.LaneName);  
    end
    ;
      

  8.   

    这个代码是oracle里面自动生成的,字段名也没错,是sqlserver改过来的
    错误信息就是:在触发的时候出错,比如修改自动pdcd的时候,
    错误提示:触发器"ITS"."LANECONFIGYANWUU" 无效且未通过重新确认
      

  9.   

    FOR EACH ROW 也没有必要