Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Trigger

  1. #1

    Trigger

    Ciao, ho una tabella fatta così: autori(nome,nognome,data_nascita,data_decesso);
    in cui nome e cognome rappresentano la chiave primaria. Vorrei creare un trigger che, dopo aver inserito due date del tipo data_nascita > data_decesso(illogico), si inseriscano automaticamente due date di default , ad esempio (01-01-9999).

    codice:
    CREATE OR REPLACE TRIGGER after_insert_trigger
    AFTER INSERT ON autori
    BEGIN
    IF :new.data_nascita > :new.data_morte
    UPDATE autori SET data_nascita=to_date('01-01-9999','dd-mm-yyyy') AND
                              data_decesso=to_date('01-01-9999','dd-mm-yyyy'); 
    END IF;
    END;
    oracle sql developer lo compila anche ma mi dà due errori:
    -SQL statement ignored
    -ORA-00933: SQL command not properly ended !!!!

  2. #2
    Ciao, nello specifico sul trigger non saprei aiutarti

    Non puoi fare questo tipo di controlli lato applicazione?
    Così eviti anche di inserire dei valori di default, ma obblighi l'utente ad inserire dei dati validi

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    136
    Prova ad aggiugere FOR EACH ROW.

    codice:
    CREATE OR REPLACE TRIGGER after_insert_trigger
    AFTER INSERT ON autori
    FOR EACH ROW
    BEGIN
    IF :new.data_nascita > :new.data_morte
    UPDATE autori SET data_nascita=to_date('01-01-9999','dd-mm-yyyy') AND
                              data_decesso=to_date('01-01-9999','dd-mm-yyyy'); 
    END IF;
    END;

  4. #4
    Ragazzi vi ringrazio per le risposte. Ho creato un nuovo trigger, questa volta funzionante.
    codice:
    CREATE OR REPLACE TRIGGER after_insert_trigger
    AFTER UPDATE ON autori
    FOR EACH ROW
    DECLARE 
    errore EXCEPTION;
    BEGIN
    IF :new.data_nascita > :new.data_decesso 
    THEN RAISE errore;
    END IF;
    EXCEPTION
    WHEN errore THEN raise_application_error (-20000,'Date non valide');
    END;
    Il problema ora sta nel fatto che il trigger deve agire solo sull'istruzione di insert che ho fatto e non su tutte le righe della tabella (for each row)...con quale istruzione si puo' fare ? ad esempio for each statement ?

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    136
    Devi usare un istruzione if che scarta le righe che non vuoi che siano modificate.Per esempio:

    codice:
    if :new.id=tabella.id then{
    //modifica riga
    }
    For each statement e for each row non garantiscono quello che vuoi fare tu.Saluti.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.