Newsgroup: it.comp.java
Titolo: Oracle stored procedures

Disperato mi rivolgo a voi JavaGurus con la speranza di ricevere lumi e
perle di conoscenza su di una spinosa questione che vado qui ad esporvi.
E' possibile , pensavo io utilizzando l'oggetto DatabaseMetaData , o in
qualche altra maniera che voi Gurus magari conoscete , recuperare i codice
sorgente ( PL\SQL ) di cui queste procedure sono fatte ???
Attendo speranzoso vostri lumi ....
Salud
Max
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Max
Ciao Max,
se ti interessa il testo e basta non è molto complicato.
Manda al server Oracle un comando sql come questo:
SELECT TEXT
FROM USER_SOURCE
WHERE NAME='nome della procedura o funzione'
ORDER BY LINE;
Ogni riga del recordset che ottieni è una riga di codice
della procedura o funzione che selezioni.
Ecco la describe della tabella USER_SOURCE:
SQL> DESC USER_SOURCE
 Name                            Null?    Type
 ------------------------------- -------- ----
 NAME                                     VARCHAR2(30)
 TYPE                                     VARCHAR2(12)
 LINE                                     NUMBER
 TEXT                                     VARCHAR2(4000)
Dovrebbe essere sufficiente.
Saluti Vincenzo.

 ORDER BY LINE;
Che dirti Vincenzo ... sei un mito!
E' esattamente quello di cui avevo bisogno. Mille grazie.
Senti , già che siamo qui approfitto della tua conoscenza per porti un
altro quesito a riguardo.
Supponiamo che io mi ricavo il testo della procedura , immaginiamo che lo
visualizzi su un JTextPane o su un qualsivoglia altro bean che visualizzi
del testo , se una volta visualizzato il lo volessi modificare e di
conseguenza modificare la stored procedure io pensavo di fare una cosa di
questo tipo : modificare il testo , fare in un qualche altro metodo della
mia classe un getText() di quella JTextArea , e poi usando tipo un oggetto
Statement fare un execute passandogli il testo modificato.
Secondo te è fattibile come cosa o suggerisci un qualche altro metodo ?
Ciao , e grazie ancora.


 Secondo te è fattibile come cosa o suggerisci un qualche altro metodo ?
Puoi farlo, devi solo stare attento di mettere all'inizio della procedura
o function la clausola "CREATE OR REPLACE " prima di inviare
la modifica al server; e soprattutto tieni conto che le modifiche DDL
(a meno che il tuo server non abbai impostazioni differenti)
sono "auto-committanti", cioè non è possibile fare rollback
se ti accorgi di aver commesso una sciocchezza.
In generale con Oracle tutte le modifiche DDL si possono fare
con comandi sql sulle tabelle di sistema. Quindi utilizzando
un oggetto Connection insieme ad un oggetto Statement o ResultSet,
a seconda dei casi, puoi fare teoricamente tutto (privilegi a parte).
Devi inoltre fare attenzione a come gestire gli eventuali errori
di compilazione, ma qui Java ti viene decisamente in aiuto.
Saluti Vincenzo.

 di compilazione, ma qui Java ti viene decisamente in aiuto.
Guarda , per il discorso del commit , nel metodo initialize della mia
classe ho fatto un conn.setAutoCommit(false) cosě non mi fa il commit in
automatico e posso sempre fare il rollback in caso di errori.
Cosa intendi quando dici che per gli errori di compilazione java mi viene
in aiuto ? Vuoi dire che se io invio al server una procedura con degli
errori di compilazione, esiste una classe java apposta che cattura
l'errore di compilazione , in modo tale che se la intercetto nel catch del
mio metodo , riesco , oltre che a far visualizzare gli errori , anche a
fare un rollback ?
Ciao , ciao ...


 fare un rollback ?
Si mi riferivo al modo (elegante) con cui Java permette di gestire le
eccezioni.
In pratica è quello che tu hai in mente.
Saluti Vincenzo.