Script batch per SQL*Plus sotto Windows

martedì 18 dicembre 2007 alle 18:45 | Pubblicato su Diario, Varie | 3 commenti

Sono anni che cerco l’equivalente del “documento here” delle shell Unix per Windows, oggi ero quasi convinto di averlo trovato ma ho avuto una amara delusione.

Il mio problema è quello di fare script batch per Windows che lancino delle query o delle procedure da SQL*Plus. Fino a oggi non ho trovato alternative alla soluzione di mettere gli script sql in un file separato (ad esempio script.sql) e poi nello script mettere qualcosa tipo:

sqlplus username/password@connect_string  @script.sql

a parte la noia di avere due file separati tutto sommato non è un gran problema. Ieri però ho avuto necessità di fare uno script con un parametro che deve essere passato a una procedura PL/SQL che lo stesso script chiama. Per fare un esempio, ho una procedura PL/SQL che si chiama “print_value(p_value varchar2)” e voglio fare un file batch per Windows che viene chiamato con un parametro e poi apre SQL*Plus e lancia la procedura print_value con il parametro.

Oggi ho verificato che lanciando direttamente dal promp della console CMD di windows una roba del genere:

%ORACLE_HOME%\sqlplus.exe utente/password@connect_string < CON
set serveroutput on size 999999
exec dbms_output.put_line('pippo');

la casa funziona, mettendo però tale codice in un file .cmd non funziona più. Francamente mi piacerebbe capire il perchè.

Quindi ho dovuto fare marcia indietro e tornare a una cosa del tipo:

echo set serveroutput on size 999999 > test.sql
echo select sysdate from dual; >> test.sql
echo exec dbms_output.put_line('%1'); >> test.sql

%ORACLE_HOME%\bin\sqlplus.exe utente/password@connect_string  @test.sql

La cosa non mi piace molto, ma tant’è che anche per script complessi con funzioni Windows impone la creazione di più file e poi l’uso di call, a differenza di quanto si può fare sulle shell Unix con la definizione di vere e proprie funzioni.

3 commenti »

RSS feed for comments on this post. TrackBack URI

  1. Ciao, ogni tanto butto un occhio al tuo blog, anche solo per la pigrizia che mi prende ogni tanto di non volermi concentrare e leggere blog in inglese. Nel ringraziarti della costanza con la quale scrivi, e degli argomenti che sono quasi sempre interessanti, in merito a questo post ti posso suggerire quello che ho deciso io in questi casi.
    Tutti gli script che vengono ripetuti li scriviamo in python, portabile sia su linux che su windows e grazie al modulo CXoracle liberamente scaricabile, riusciamo a fare tutto con grande semplicità.
    A me personalmente ha rivoluzionato il lavoro.

  2. In realtà c’è un modo semplice per fare quello che ti serve, sempre che non abbia franiteso quello che hai scritto: è sufficiente che nello script pl-sql referenzi il parametro che deve arrivare dall’esterno utilizzando la notazione &1 (&2, &3, ecc… a seconda di quanti parametri vuoi usare).
    Poi nella chiamata a sqlplus e allo script passi anche il parametro:
    %ORACLE_HOME%\bin\sqlplus.exe utente/password@connect_string @test.sql PARAM

    Nello script il parametro PARAM viene sostituito ad ogni occorrenza della variabile &1.
    Maggiori dettagli nel manuale di sql-plus: http://lbd.epfl.ch/f/teaching/courses/oracle8i/server.815/a66736/ch33.htm#2004

  3. Manuele,
    L’idea di python è interessante, solo che io non ho mai usato python e studiarlo sarebbe l’ennesima sfilda per la quale però in questo momento non mi sento pronto.
    Il suggerimento di Paolo mi sembra corretto, alla prossima occasione devo provare.


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Blog su WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: