Newsgroup: it.comp.software.database
Titolo: Oracle stored procedure and Trigger

Ciao,
devo implementare un trigger su una tabella oracle che chiama un programmino
Java quando viene inserito un certo valore in un certo campo.
No problem per trigger e programma Java.
Quello che vorrei chiedere è se c'è la possibilità di cambiare la condizione
del trigger senza agire direttamente sulla tabella.
mi spiego meglio:
ho un trigger che si aziona ogni volta che il campo SALARY di un record
viene incrementato di >= 20%.
voglio cambiare il valore e mettere 15%, ma lo voglio fare senza andarmi ad
aprire la tabella.
Qualche idea?
Grazie a tutti



Non credo di aver capito.
Quale valore vuoi cambiare ? Se vuoi fare in modo che il trigger scatti al
superamento del 15% piuttosto che del 20%, secondo me dovresTi far scattare
SEMPRE il trigger sulla variazione del campo SALARY, controllando, con
:new.salary e :old.salary, di quanto č stata la variazione.
Ma, in qualsiasi caso, dovresTi variare il codice del trigger...
Dammi qualche info in piů, magari posso aiutarTi....
Saluti
Fabio GRANDE

 Ma, in qualsiasi caso, dovresTi variare il codice del trigger...
esatto, questo č il mio problema.
Cerco di spiegarmi meglio:
in pratica mi serve un trigger configurabile che mi permetta tramite una
semplice GUI di cambiare quel valore del trigger stesso.
Probabilmente quello che mi serve č una semplice applicazione Java che
tramite JDBC mi butta dentro un nuovo script (che definisce il trigger) ogni
volta che devo cambiarne i valori.
In questo modo un utente puň impostare i valori del trigger senza dover
agire direttamente sul db.
Francamente non sono un esperto di Oracle e JDBC e quindi, anche se
intuitivamente mi sembra plausibile, mi servirebbe una conferma.
Spero di essere stato chiaro e ti ringrazio della risposta.

Mah... personalmente seguirei un'altra strada...
Piuttosto che andare a "riscrivere" il codice del trigger di nascosto
(quindi da codice), Ti suggerirei di utilizzare una tabella di
configurazione dalla quale andare a leggere il valore di scostamento (15 o
20 o quel che vuoi...)
In qualunque caso devi fare un accesso al database, anche per ricreare il
trigger, ma c'e' comunque una bella differenza : ricreare un trigger è
un'operazione "lunga" per il database, mentre una update in una tabella è
banale...
Spero di essere stato chiaro
Saluti
Fabio GRANDE

quindi suggerisci qualcosa del tipo:
CREATE OR REPLACE TRIGGER sal_trig
AFTER UPDATE OF sal ON emp
FOR EACH ROW
WHEN (new.sal > (SELECT salary FROM config)* old.sal)
CALL log_sal(:new.empno, :old.sal, :new.sal);
dove config è una tabella con un unico record e il valore in salary viene
cambiato dalla GUI?
Se funziona mi sembra una soluzione ottima

Onestamente non so dirTi se funziona già in testata... bisognerebbe provare.
Io avrei pensato ad un trigger che cambia sempre e comunque al variare di
SAL :
CREATE OR REPLACE TRIGGER sal_trig
AFTER UPDATE OF sal ON emp
FOR EACH ROW
SELECT salary INTO myvar FROM config WHERE campocodice = 'PERC'
if :new.sal > myvar then
  CALL log_sal(:new.empno, :old.sal, :new.sal);
end if
Ma se funziona nel modo che hai indicato Tu, è ancora meglio !
Permettimi un consiglio. COme vedi ho supposto che la tabella di
configurazione possieda un campo "codice", con il quale puoi riutilizzare la
stessa tabella per eventuali altri parametri di configurazione....
Saluti
Fabio GRANDE
PS - Nel caso Tu riesca a provare il trigger con la Tua intestazione,
saresTi così gentile da dirmi se funziona ?

 saresTi cosě gentile da dirmi se funziona ?
ovviamente
ciao e grazie

 ha scritto nel
messaggio news:9dtuam$fnk$1...@fe1.cs.interbusiness.it...
