PDA

Visualizza la versione completa : [PL/SQL]Trigger nn funzionante


antony85
24-02-2009, 15:09
salve,utilizzo il seguente trigger in modo ke controlli che i valori inseriti nella tabella zb.nome non siano gli stessi presenti in za.nome...il trigger viene compilato,ma al momento dell'esecuzione,oracle presenta l'errore
"superato numero massimo di livelli sql ricorsivi(50)"
come posso risolvere??

CREATE OR REPLACE TRIGGER tr4
BEFORE INSERT ON zb
FOR EACH ROW
DECLARE
CURSOR c1 IS (SELECT nome FROM za);
varc1 c1%rowtype;
app EXCEPTION;
flag boolean:=FALSE;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO varc1;
EXIT WHEN c1%NOTFOUND;
IF :NEW.nome = varc1.nome THEN
RAISE app;
END IF;
END LOOP;
IF flag= FALSE then
INSERT INTO zb(nome,prezzo_singolo)VALUES(:NEW.nome,:NEW.prezz o_singolo);
COMMIT;
END IF;
EXCEPTION
WHEN app THEN
Raise_Application_Error(-20002,'Errore parola gia presente in za');
END;

Joe Taras
24-02-2009, 16:47
Ciao Antony,
sempre alla presa con i trigger.

Come l'altro giorno (poi non mi hai detto se hai risolto) stai creando un trigger ricorsivo perché stai dicendo se sei in insert su zb allora nel trigger fai una nuova insert in zb, che a sua volta richiamerà il trigger all'infinito.

Io credo che per risolvere questo problema non devi operare con i trigger ma prima di fare il post del dato devi verificare che la condizione sia rispettata.

Joe Taras
24-02-2009, 16:51
Ciao,
scusami ho solo ora letto che avevi risolto con l'altro problema. Ok meglio così!

antony85
25-02-2009, 13:40
come effettuo il post del dato?

Joe Taras
25-02-2009, 15:19
Beh il post lo fai già altrimenti il trigger come scatta?
Intendo post come salvataggio.

Tu hai una applicazione, che salva su DB, in questo caso una insert, prima di fare la insert verifica che tale dato non sia presente nell'altra tabella altrimenti restituisci un warning che avvisa l'utente che tale dato non può essere salvato.

antony85
25-02-2009, 17:28
ok,ho risolto il problema di prima(semplicemente mi è bastato togliere la insert nel trigger(ke generava il problema ricorsivo)).

Ora ho un altro problema,il quale gestisce le date:
in pratica come input ho una data completa(20-gen-85) e voglio effettuare dei controlli sopra,ovvero ke se la data è compresa in un periodo(ovvero dal 1 gennaio al 31 marzo) fai questo,altrimenti se compresa in un altro periodo(1 aprile 31 giugno)fai quest'altro.il problema è ke la data incorpora anche il campo anno,ke a me da problemi nei confronti coi periodi(i quali sono senza anno),quindi magari avrei bisogno di caratteri "jolly" per poter fare il confronto...cm si fa?

antony85
26-02-2009, 13:42
up :(

Loading