Aggiornamento valore tramite trigger DOPO l’AGGIORNAMENTO di Oracle 11g

Sto sviluppando un piccolo database di libreria e non voglio permettere a qualcuno di aggiornamento di qualcuno ID. Ma ho bisogno di utilizzare DOPO l’AGGIORNAMENTO e PER OGNI DICHIARAZIONE (mi hanno detto che è Oracle è di default). Quindi, in sostanza, se qualcuno aggiorna il cliente info e modificare il proprio ID o digita male, il trigger si aggiorna automaticamente di nuovo per il vecchio valore. Il problema è che Oracle non mi lascia usare :NUOVO e :OLD quando si utilizza PER OGNI ISTRUZIONE. Ci sono soluzioni a questo problema?

CREATE OR REPLACE TRIGGER alter_id_trigger
AFTER UPDATE ON CUSTOMER
BEGIN
   UPDATE CUSTOMER SET ID = :OLD.ID
   WHERE ID = :NEW.ID;
END;

Grazie!

  • Sono cliente e customer due tabelle diverse? O sono la stessa tabella? Una dichiarazione a livello di trigger non hanno accesso al :new o :old pseudo-record, avete bisogno di un trigger a livello di riga per che.
  • Sono la stessa cosa, mi sono dimenticato di tradurre. Non c’è nessun altro modo per impostare l’ID vecchio al nuovo senza un trigger a livello di riga? 🙁
  • Se si vuole fare a livello di riga le modifiche apportate ai dati, perché non si desidera che un trigger a livello di riga? Se non si desidera consentire a qualcuno di cambiare il customer.id, perché ancora di fare che un campo modificabile nell’applicazione o generare il UPDATE istruzione dall’applicazione, in primo luogo? Sembra strano a voler consentire l’applicazione per modificare le id ma quindi creare un trigger che cambia i dati indietro. Inoltre, è probabile che una tabella come customer avrebbe bambino tabelle di cui chiavi esterne dovrebbe impedire automaticamente l’ id non può essere modificata.
  • L’argomento è molto discusso in modo approfondito qui: stackoverflow.com/q/8330884/1680777
InformationsquelleAutor Henrique | 2014-06-17



2 Replies
  1. 4

    Utilizzare il seguente codice per l’attivazione.
    Le modifiche fatte:

    1. Uso PRIMA di AGGIORNARE invece DOPO l’AGGIORNAMENTO.
    2. Impostare il valore di ID di quello che era in precedenza. (Il Campo ID non sarebbe mai modificato)

      CREATE OR REPLACE TRIGGER ALTER_ID_TRIGGER
      BEFORE UPDATE ON CUSTOMER
      BEGIN
      SET :NEW.ID = :OLD.ID
      END;

    Nota: Con PRIMA DI AGGIORNARE:

    • Non è possibile creare un trigger before su vista.
    • Si possibile aggiornare l’ :NUOVI valori.
    • Si aggiornamento l’ :VECCHI valori.
    • il suo lavoro dopo aggiungere FOR EACH ROW perché REFERENCING ammessi a livello di riga
  2. 2

    Penso si desidera un prima trigger update:

    CREATE OR REPLACE TRIGGER alter_id_trigger
    BEFORE UPDATE ON CUSTOMER
    BEGIN
       SET :NEW.ID = :OLD.ID
    END;

    Si potrebbe verificare se il valore viene modificato, ma che sembra inutile.

Lascia un commento