sql >> Databasteknik >  >> RDS >> Oracle

Oracle:utlösare för automatisk ökning.

Okej, jag tror jag förstår vad som händer. Svaret på din fråga är ett absolut ja . Det kan bli en stor inverkan om du inaktiverar den här utlösaren.

Anledningen till att den här utlösaren verkar finnas är för att hantera situationen där ett primärt nyckelvärde inte är tillhandahålls på en insats i ditt bord. Om detta inträffar någonstans i din kod kommer de att bryta inläggen om de tar bort triggern.

Du måste göra två saker.

  1. Korrigera avtryckaren, den är uppenbarligen trasig; fixa det:

    CREATE OR REPLACE TRIGGER  BI_PRIVILEGE
      before insert on PRIVILEGE              
      for each row  
    begin   
      if :NEW.PRIVILEGE_ID is null then 
        select PRIVILEGE_SEQ.nextval into :NEW.PRIVILEGE_ID from dual; 
      end if; 
    end; 
    

    Om du använder Oracle 11G eller senare kan du använda detta istället:

      if :NEW.PRIVILEGE_ID is null then 
        :NEW.PRIVILEGE_ID := PRIVILEGE_SEQ.nextval; 
      end if; 
    
  2. Ta reda på om detta verkligen händer. Om du infogar poster utan en primärnyckel måste du ta reda på varför detta händer och om beteendet är korrekt. Om det är du har fastnat med avtryckaren, annars fixa det. Om du aldrig infogar poster utan en primärnyckel kan du inaktivera triggern.

    Det snabbaste sättet att ta reda på det kan vara att inaktivera triggern ändå, men det skulle bryta dina insatser. Om detta är en produktionsdatabas kan bara du se om det är värt det. Jag skulle personligen inte göra det.



  1. Fel:SQLSTATE[HY000] [2002] Ingen sådan fil eller katalog

  2. Kan jag tvinga Yii att använda ett visst alias i genererad SQL

  3. Släpp automatiskt tabeller och index äldre än 90 dagar

  4. Använda en utlösare för att simulera en andra identitetskolumn i SQL Server 2005