Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Disabilitare trigger Oracle
lunedì 18 giugno 2012 - 11.03
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 3.5
|
Oracle 11g
volperubbia
Profilo
| Senior Member
375
messaggi | Data Invio:
lun 18 giu 2012 - 11:03
Ciao a tutti,
è possibile dall'interno di un trigger definito su una tabella A
disabilitare un trigger di una tabella B?
In pratica nel primo trigger di A dovrei fare un update sulla tabella B,
ma senza far partire eventuali trigger presenti su B. Qualche idea?
Grazie per l'attenzione,
Davide
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
mar 19 giu 2012 - 15:13
>Ciao a tutti,
Ciao
>è possibile dall'interno di un trigger definito su una tabella A
>disabilitare un trigger di una tabella B?
>In pratica nel primo trigger di A dovrei fare un update sulla
>tabella B, ma senza far partire eventuali trigger presenti su B. Qualche idea?
siccome ALTER TABLE dovrebbe essere supportato anche da Oracle all'interno di un trigger, direi che si può fare.
In SQL Server si fa, quindi credo che Oracle supporti l'operazione.
>Grazie per l'attenzione,
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi
volperubbia
Profilo
| Senior Member
375
messaggi | Data Invio:
gio 21 giu 2012 - 09:14
Ciao Alessandro,
in Oracle per disabilitare tutti i triggers di una tabella si può fare:
EXECUTE IMMEDIATE 'ALTER TABLE tbl_mame DISABLE ALL TRIGGERS';
...
EXECUTE IMMEDIATE 'ALTER TABLE tbl_mame ENABLE ALL TRIGGERS';
EXCEPTION WHEN OTHERS THEN EXECUTE IMMEDIATE 'ALTER TABLE tbl_mame ENABLE ALL TRIGGERS';
Queste righe le accetta ad esempio in una stored procedure, ma non nel corpo di un trigger, lo compila ma poi da errore in escuzione.
Per ora ho risolto con una "variabile globale":
CREATE OR REPLACE PACKAGE my_package AS
ENABLE_TRIGGER BOOLEAN := TRUE;
END;
my_package.ENABLE_TRIGGER := FALSE;
...;
my_package.ENABLE_TRIGGER := TRUE;
EXCEPTION WHEN OTHERS THEN my_package.ENABLE_TRIGGER := TRUE;
Funziona, ma non è una soluzione finale, appunto perchè globale.
Davide
micto27
Profilo
| Senior Member
385
messaggi | Data Invio:
ven 22 giu 2012 - 21:31
>Ciao a tutti,
>è possibile dall'interno di un trigger definito su una tabella
>A
>disabilitare un trigger di una tabella B?
>In pratica nel primo trigger di A dovrei fare un update sulla
>tabella B,
>ma senza far partire eventuali trigger presenti su B. Qualche
>idea?
Ciao,
lo statement di UPDATE eseguito nel trigger della tabella A è riconoscibile in qualche modo?
Ad esempio, se l'UPDATE attivato dal trigger tabella A modificasse solo una specifica colonna (o solo alcune colonne),
nel trigger della tabella B potresti valutare tale condizione ed eventualmente "saltare" la logica propria del trigger stesso.
Al limite potresti sfruttare questa possibilità creandoti una colonna funzionale a tale scopo.
Supponi che le condizioni di update non siano facilmente distinguibili,
potresti aggiungere una colonna (es. SKIP_TRIGGER NUMBER(1))
nel trigger della tabella A allo statement UPDATE TABELLE_B SET A=.., B=.., .... potresti aggiungere , SKIP_TRIGGER = SKIP_TRIGGER * -1 ...
e nel trigger della tabella B potresti valutare se la colonna SKIP_TRIGGER è fra quelle modificate
IF NOT UPDATING('SKIP_TRIGGER') THEN
... logica del trigger B
END IF;
Ciao, Michele
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !