Oracle
 sql >> Database >  >> RDS >> Oracle

Impedisci inserimento trigger

Ho parlato con un docente universitario che ha insegnato PL/SQL dopo aver tenuto una presentazione a una conferenza. Il mio intervento riguardava le buone pratiche PL/SQL; una delle mie diapositive diceva semplicemente "Non utilizzare i trigger". Il docente mi ha detto che trova tali consigli difficili da conciliare con le esigenze del curriculum. Devono insegnare ai loro studenti tutta la sintassi, ma ha ammesso che spesso impostano compiti che richiedono soluzioni che non useremmo quando scriviamo software in modo professionale.

Questa è una domanda del genere. L'approccio corretto consiste nell'utilizzare un vincolo di controllo, come mostra la risposta di Gordon . I vincoli sono più efficienti e anche idiomatici. Ma il tuo insegnante vuole che tu scriva un trigger, quindi ecco il tuo codice, corretto.

CREATE OR REPLACE TRIGGER CheckAdvance
    BEFORE INSERT OR UPDATE OF advance ON titles
    FOR EACH ROW
BEGIN
    IF (:new.advance < 0  
         OR :new.advance > 100)
    THEN
        raise_application_error(-20000
                , 'Advance cannot be less than zero or greater than one hundred.');
    END IF;
END;

Punti da notare:

  1. CREATE OR REPLACE significa che possiamo modificare il codice di attivazione senza un'istruzione DROP preliminare.
  2. BEGIN e END frame di codice come i corpi dei trigger.
  3. I condizionali statici sono racchiusi con le parole chiave IF ... END IF; QUANDO serve per uscire dai costrutti di ciclo.
  4. Valori delle colonne della tabella di riferimento con parole chiave :NEW (e :OLD) - prendi nota dei due punti.
  5. Usa RAISE_APPLICATION_ERROR per generare un'eccezione; il numero di errore deve essere compreso tra -20999 e -20000 che Oracle riserva per le eccezioni definite dall'utente.
  6. Rendi significativo il tuo messaggio di errore:dì ai tuoi utenti cosa hanno sbagliato invece di farli indovinare.
  7. Impara a usare l'indentazione per rendere leggibile il tuo codice. I tuoi futuri colleghi te ne saranno grati.