|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2006
Messaggi: 199
|
[SQL]Oracle 10 express 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'
__________________
Asus P5B-Intel Core Duo E6400-Kingston 1GB 667-Sapphire X1900gt rev.2-Maxtor 200gb Sata 2-Ali 450w schifoso |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Secondo me ti e' vietato perche' Oracle si e' accorto che entreresti in ricorsione.
Il trigger verrebbe richiamato dal trigger stesso, o sbaglio? PS: Non e' che avresti voluto creare un trigger "Instead of Insert" invece di un "After insert" Comunque per soluzioni simili a queste esistono le function column, ovvero colonne che mappano direttamente una funzione (scalare) di altre colonne della tabella stessa, eventualmente materializzate (e/o indicizzate) per questioni di performance.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 19-02-2009 alle 12:33. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Jan 2006
Messaggi: 199
|
nn credo il problema sia la ricorsione,io ho solo bisogno di un trigger,ke al momento dell'inserimento di due valori in due attributi diversi,generi la somma dei due valori e la inserisca in un terzo attributo...qst cosa va fatta x ogni riga..
__________________
Asus P5B-Intel Core Duo E6400-Kingston 1GB 667-Sapphire X1900gt rev.2-Maxtor 200gb Sata 2-Ali 450w schifoso |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
INSERT INTO za ... di fatto stai inserendo una nuova riga... il che scatenera' di nuovo il trigger stesso, etc. da cosa ho capito tu vorresti veramente usare un Trigger Instead of Insert. Il quale inserira' la riga (che essendo instead of non e' ancora stata inserita), aggiungendo anche il terzo parametro. Ti invito comunque a studiare le column function, dato che sono la soluzione migliore per questo tuo problema specifico.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jan 2006
Messaggi: 199
|
raga ho risolto cosi ^^
CREATE OR REPLACE TRIGGER tr1 before INSERT ON za FOR EACH ROW BEGIN :NEW.c:=:NEW.a+:NEW.b; END;
__________________
Asus P5B-Intel Core Duo E6400-Kingston 1GB 667-Sapphire X1900gt rev.2-Maxtor 200gb Sata 2-Ali 450w schifoso |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:09.




















