Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [SQL]Creazione trigger

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    100

    [SQL]Creazione trigger

    Salve,ho utilizzato il seguente trigger in oracle 10 xe:
    la tabella è composta:za(a(number),b(number),c(number))

    create or replace trigger tr1
    after insert on za
    for each row
    declare
    x number(3):=5;
    y number(3):=6;
    z number(4):=x+y;
    begin
    insert into za(c) values(z);
    end;

    il trigger viene compilato,ma all'atto del suo richiamo durante l'inserimento dei valori nella tabella,viene emesso il seguente messaggio d'errore...cm risolvo?

    error ORA-04091: La tabella ADMIN.ZA è in fase di modifica, il trigger/funzione non può leggerla ORA-06512: a "ADMIN.TR1", line 6 ORA-04088: errore durante esecuzione del trigger 'ADMIN.TR1'

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Prova a sostituire

    after insert on za

    con

    before insert on za

    (comunque la prossima volta credo ti convenga specificare che si tratta di PL/SQL e non di SQL)
    every day above ground is a good one

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    100
    niente nn va...solito errore

  4. #4
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    Scusa ma non capisco una cosa.
    Tu fai un trigger sulla insert della tabella ZA che a sua volta inserisce in ZA, ma non rischi di mandarlo in loop infinito???

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    100
    io nn mi reputo esperto di trigger,x qst ho postato qui.
    se ho sbagliato la sintassi del trigger,vorrei ke qlkn mi dicesse dove ho sbagliato e come avrei dovuto scrivere.
    cio che deve fare il trigger sembra chiaro..al momento di una insert di a e b,automaticamente deve fare la somma dei due attributi e SULLA STESSA TUPLA inserisce anche il valore c(somma di a e b)

  6. #6
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    Originariamente inviato da antony85
    io nn mi reputo esperto di trigger,x qst ho postato qui.
    se ho sbagliato la sintassi del trigger,vorrei ke qlkn mi dicesse dove ho sbagliato e come avrei dovuto scrivere.
    cio che deve fare il trigger sembra chiaro..al momento di una insert di a e b,automaticamente deve fare la somma dei due attributi e SULLA STESSA TUPLA inserisce anche il valore c(somma di a e b)
    Ho capito cosa vuoi fare.

    Come dici tu, ad ogni insert di a e b (stesso record) devo AGGIORNARE c

    Quindi:

    Il trigger è in after insert su za ma all'interno devi fare una UPDATE su za, altrimenti accade (facendo la insert come fai tu) che:
    Inserisco a e b -> chiamo il trigger -> inserisco c -> chiamo il trigger ad infinito

  7. #7
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    Originariamente inviato da antony85
    io nn mi reputo esperto di trigger,x qst ho postato qui.
    se ho sbagliato la sintassi del trigger,vorrei ke qlkn mi dicesse dove ho sbagliato e come avrei dovuto scrivere.
    cio che deve fare il trigger sembra chiaro..al momento di una insert di a e b,automaticamente deve fare la somma dei due attributi e SULLA STESSA TUPLA inserisce anche il valore c(somma di a e b)
    Ovviamente quando fai la update usa una bella WHERE

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    100
    in base al tuo consiglio,ho usato le seguente sintassi
    create or replace trigger tr1
    after insert on za
    for each row
    begin
    update za set c=5 where a=1;
    end;

    giusto x provare gli do 5 all'attrib. c,ma niente,da sempre lo stesso messaggio d'errore!per piacere potresti scrivermelo tu il trigger in forma giusta???grazie!

  9. #9
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    Ahia, mi sa che non si può fare!

    Leggi qui:
    http://www.techonthenet.com/oracle/t...ter_insert.php

    Prova con un before insert e dimmi se va, il triggercome scritto stava bene.

    Ciao a dopo

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da Joe Taras
    Prova con un before insert e dimmi se va
    Sì credo pure io che debba andare before, infatti lo consigliavo prima anche se non mi ero accorto del fatto che il trigger degenerasse in un ciclo infinito...
    every day above ground is a good one

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 © 2024 vBulletin Solutions, Inc. All rights reserved.