KSH - SQL plus : : Not Found

KSH - SQL plus : : Not Found - Shell/Batch - Programmation

Marsh Posté le 29-12-2005 à 11:03:48    

Bonjour à tous
 
Je suis nouvelle en programmation shell et j'ai un problème incompréhensible pour moi.
Voilà, je programme sous ksh et j'aimerai exécuter un script SQL sur une bas ORACLE 8.1.7 (je ne peux pas utiliser du PL/SQL).
Mon scipt ressemble à ceci:
`sqlplus -s /nolog << EOF  
 connect ${SC_ALIAS_LOGIN}/${SC_ALIAS_PWD}@${DB_BASE}    
 SET ECHO OFF  
 SET FEEDBACK OFF  
 SET HEADING OFF  
 SET COLSEP ';'  
 ${cmd}
 exit
EOF` | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst
 
lorsque je l'exécute, j'ai l'erreur SQL*Plus::  not found
 
Et pourtant, si je modifie le script ainsi
`sqlplus -s /nolog << EOF  > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst
 connect ${SC_ALIAS_LOGIN}/${SC_ALIAS_PWD}@${DB_BASE}    
 SET ECHO OFF  
 SET FEEDBACK OFF  
 SET HEADING OFF  
 SET COLSEP ';'  
 ${cmd}
 exit
EOF`  
 
Là il s'exécute et j'ai des résultats. :pfff:  
 
Je ne peux utiliser cette deuxième solution car j'ai beaucoup d'espace dans certaine tables et elle dépasse 2Go, ce qui fait planter mon script. :cry:  
 
J'ai vérifié le PATH et le ORACLE_HOME et j'ai testé le chargement de l'environnement ORACLE dans mon script avec les instructions
export PATH=$PATH:/usr/bin/X11:/usr/local/bin
umask=022
export ORACLE_SID=${1}
export ORAENV_ASK=NO
. oraenv
 
mais le comportement est toujours aussi bizarre  :pt1cable:  :pt1cable:  :pt1cable:  
Je suis preneuse pour toute piste qui m'aiderai à avancer.
 
Merci

Reply

Marsh Posté le 29-12-2005 à 11:03:48   

Reply

Marsh Posté le 29-12-2005 à 16:30:46    

Salut
 
J'ai trouvé la solution. En fait, le shell essayait d'interpreter le resultat de mon sql comme une commande. J'ai donc viré les "`" et rediriger le tout dans un fichier (en début de script.
Mon code ressemble à present à ceci:

Code :
  1. if [ ! -f ${REP}/${DB_USER}.${table}${Ver_Chg}.lst ]; then
  2.   (sqlplus -s /nolog | tr -d ' \t'  > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst) <<EOF
  3.   whenever sqlerror exit 2
  4.          whenever oserror exit 1
  5.   connect ${SC_ALIAS_LOGIN}/${SC_ALIAS_PWD}@${DB_BASE}
  6.   SET TERMOUT OFF 
  7.   SET TRIMSPOOL ON
  8.   SET RECSEP OFF 
  9.   SET NEWPAGE 0   
  10.   SET SPACE 0     
  11.   SET LINESIZE 4000
  12.   SET PAGESIZE 0 
  13.   SET ECHO OFF
  14.   SET FEEDBACK OFF
  15.   SET HEADING OFF
  16.   SET COLSEP ';'
  17.   ${cmd}
  18.   exit
  19. EOF


 
 
 

Reply

Marsh Posté le 29-12-2005 à 16:52:07    

En fait, les backquotes ( car. ` ) retournent au shell le texte imprimé sur le flux de sortie standard à l'exécution. Ce qui signifie qu'il essaie d'exécuter ce texte.
 
Exemple :  

`echo find`


t'imprimera l'aide de la commande "find" qui s'est exécutée.
 
D'où ton erreur :)


Message édité par Elmoricq le 29-12-2005 à 16:52:32
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed