sql >> Databáze >  >> RDS >> Oracle

Oracle:spouštěč automatického zvýšení.

Dobře, myslím, že chápu, co se děje. Odpověď na vaši otázku je naprosto masivní ano . Pokud tento spouštěč deaktivujete, může to mít velký dopad.

Důvod, proč se zdá, že tento spouštěč existuje, je řešit situaci, kdy hodnota primárního klíče není poskytnuto na vložce do vašeho stolu. Pokud k tomu dojde kdekoli ve vašem kódu odstraněním spouštěče tyto vložky přerušíte.

Musíte udělat dvě věci.

  1. Opravte spoušť, je zjevně rozbitá; opravit:

    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; 
    

    Pokud používáte Oracle 11G nebo vyšší, můžete místo toho použít toto:

      if :NEW.PRIVILEGE_ID is null then 
        :NEW.PRIVILEGE_ID := PRIVILEGE_SEQ.nextval; 
      end if; 
    
  2. Zjistěte, zda se to skutečně děje. Pokud vložíte záznamy bez primárního klíče, musíte zjistit, proč k tomu dochází a zda je chování správné. Pokud ano, uvízli jste u spouště, jinak to opravte. Pokud nikdy nevložíte záznamy bez primárního klíče, můžete spouštěč deaktivovat.

    Nejrychlejším způsobem, jak to zjistit, může být stejně deaktivovat spoušť, ale rozbilo by to vaše vložky. Pokud se jedná o produkční databázi, pouze vy můžete říci, zda to stojí za to. Osobně bych ne.



  1. operátor neexistuje:uuid =bytea Java s Postgres

  2. PG::ConnectionBad (FATAL:pg_hba.conf odmítá připojení pro hostitele 172.17.0.1, uživatel XXX, databáze XXX, SSL vypnuto):

  3. Nejlepší způsob, jak obdržet e-mail po souběžném selhání (sql - trigger - application)

  4. Pochopení aliasů Oracle – proč není alias v dotazu rozpoznán, pokud není zabalen do druhého dotazu?