1.我寫了多個表的TRIGGER到一個SQL文件中去執行,發現ORACLE識別不了,都把代碼放在第一個TRIGGER中了!如下
CREATE OR REPLACE TRIGGER "ASC"."TR_CITY_LASTUPDATE" BEFORE
INSERT
OR UPDATE ON "CITY" 
    FOR EACH ROW 
    declare
  -- local variables here
begin    
  IF INSERTING THEN
    :New.Revise:=0;
    :New.Last_Updat := sysdate;
  ELSE    
    :New.Revise:=:New.Revise+1;
    :New.Last_Updat := sysdate;
  END IF;   
end TR_CITY_LASTUPDATE;create or replace trigger TR_COM_GROUP_LASTUPDATE
  before INSERT OR update on COM_GROUP  
  for each row
declare
  -- local variables here
begin    
  IF INSERTING THEN
    :New.Revise:=0;
    :New.Last_Updat := sysdate;
  ELSE    
    :New.Revise:=:New.Revise+1;
    :New.Last_Updat := sysdate;
  END IF;   
end TR_COM_GROUP_LASTUPDATE;以上是兩個TRIGGER,可生成後是一個TRIGGER,並且是非法的,分開執行就沒問題
我是用POWERDESIGN建模後生成SQL執行的,我用PL/SQL工具運行結果也一樣.

解决方案 »

  1.   

    SQL應該是這樣
    create or replace trigger TR_CITY_LASTUPDATE
      before INSERT OR update on CITY
      for each row
    declare
      -- local variables here
    begin      IF INSERTING THEN
        :New.Revise:=0;
        :New.Last_Updat := sysdate;
      ELSE    
        :New.Revise:=:New.Revise+1;
        :New.Last_Updat := sysdate;
      END IF;   
    end TR_CITY_LASTUPDATE;
    create or replace trigger TR_COM_GROUP_LASTUPDATE
      before INSERT OR update on COM_GROUP  
      for each row
    declare
      -- local variables here
    begin      IF INSERTING THEN
        :New.Revise:=0;
        :New.Last_Updat := sysdate;
      ELSE    
        :New.Revise:=:New.Revise+1;
        :New.Last_Updat := sysdate;
      END IF;   
    end TR_COM_GROUP_LASTUPDATE;
      

  2.   

    每个trigger写完后加斜杠“/”