#! /usr/bin/ksh init_sqlplus() { # Creation du named pipe if [ -e $MITMP/sqlplus.$$.in ]; then rm -f $MITMP/sqlplus.$$.in fi mkfifo $MITMP/sqlplus.$$.in # Lancement de sqlplus en tache de fond $ORACLE_HOME/bin/sqlplus -s /nolog < $MITMP/sqlplus.$$.in > /dev/null 2>&1 & exec 3> $MITMP/sqlplus.$$.in # connection et set sqlplus echo "connect / as sysdba" >&3 echo "set pagesize 0" >&3 echo "set linesize 32767" >&3 echo "set trimspool on" >&3 echo "set colsep \"$SEP\"" >&3 } req_sqlplus() { MIFILE=$$`date +%Y%m%d%H%M%S` # Lancement de la req dans un spool de sortie echo "spool $MITMP/$MIFILE.data" >&3 echo "$1" >&3 echo "spool off" >&3 # Création d'un fichier flag indiquant la fin de la req echo "spool $MITMP/$MIFILE.flag" >&3 echo "prompt fin_req" >&3 echo "spool off" >&3 # Attente du flag fin until [ -e $MITMP/$MIFILE.flag ] do [ -e $MITMP/$MIFILE.flag ] done # Affichage des donnees resultat sur la sortie standard cat $MITMP/$MIFILE.data # Suppression des fichiers temporaires (data et flag) rm -f $MITMP/$MIFILE.data rm -f $MITMP/$MIFILE.flag } close_sqlplus() { echo "exit" >&3 rm -f $MITMP/sqlplus.$$.in } # MAIN ###### # Init variable export MITMP=/tmp export SEP=";" export NLS_DATE_FORMAT="YYYY.MM.DD HH24:MI:SS" # Lance sqlplus init_sqlplus # ... # Requete 1 req_sqlplus "select sysdate from dual;" # ... # Requete 2 req_sqlplus "select sysdate,user from dual;" # ... # fermer sqlplus close_sqlplus