KSH - SQL plus :Séparteur
Bonjour à tous.
J'espere que je suis dans la bonne rubrique, comme je ne sais pas si mon problème est lié à ORACLE ou à UNIX, j'ai choisi l'une des deux rubriques. Voila:
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 base ORACLE 8.1.7 (je ne peux pas utiliser du PL/SQL).
Mon scipt ressemble à ceci:
Code:
1 2 3 4 5 6 7 8 9 10
|
`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
Citation:
SQL*Plus:: not found
Et pourtant, si je modifie le script ainsi
Code:
1 2 3 4 5 6 7 8 9 10
|
`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.
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.
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
Code:
1 2 3 4 5 6
|
export PATH=$PATH:usr/bin/X11usr:/local/bin
umask=022
export ORACLE_SID=${1}
export ORAENV_ASK=NO
. oraenv |
mais le comportement est toujours aussi bizarre
Je suis preneuse pour toute piste qui m'aiderai à avancer.
Merci
Re: KSH - SQL plus : : Not Found
Citation:
Envoyé par Mella
Mon scipt ressemble à ceci:
Code:
1 2 3
|
`sqlplus -s /nolog << EOF
EOF` | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst |
je pense qu'il suffit d'enlever les accent graves
Code:
1 2 3 4
|
sqlplus -s /nolog << EOF | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst
connect ....
EOF |
Re: KSH - SQL plus : : Not Found
Citation:
Envoyé par laurentschneider
je pense qu'il suffit d'enlever les accent graves
Code:
1 2 3 4
|
sqlplus -s /nolog << EOF | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst
connect ....
EOF |
Lorsque je vire les "`", j'ai le message d'erreur suivant:
Citation:
./creation_fichier_plats.ksh[76]: syntax error at line 115 : `<<' unmatched
Si je modifie mon script comme tu le fais en ajoutant les "`" par contre, ça resoud mon problème SQL*Plus:: Not Found mais par contre, les espaces ne sont pas supprimés du fichier résultat :?
Merci pour ta réponse
Re: KSH - SQL plus : : Not Found
Citation:
Envoyé par Mella
Citation:
Envoyé par laurentschneider
je pense qu'il suffit d'enlever les accent graves
Code:
1 2 3 4
|
sqlplus -s /nolog << EOF | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst
connect ....
EOF |
Lorsque je vire les "`", j'ai le message d'erreur suivant:
Citation:
./creation_fichier_plats.ksh[76]: syntax error at line 115 : `<<' unmatched
Si je modifie mon script comme tu le fais en ajoutant les "`" par contre, ça resoud mon problème SQL*Plus:: Not Found mais par contre, les espaces ne sont pas supprimés du fichier résultat :?
Merci pour ta réponse
tu noteras que j'ai mis le pipe après le premier EOF pas le 2e!!!
non pas
Code:
1 2 3 4
|
sqlplus <<EOF
...
EOF | tr -d " " |
mais
Code:
1 2 3 4
|
sqlplus <<EOF | tr -d " "
...
EOF |
Re: KSH - SQL plus : : Not Found
Citation:
Envoyé par laurentschneider
tu noteras que j'ai mis le pipe après le premier EOF pas le 2e!!!
non pas
Code:
1 2 3 4
|
sqlplus <<EOF
...
EOF | tr -d " " |
mais
Code:
1 2 3 4
|
sqlplus <<EOF | tr -d " "
...
EOF |
Oui, j'ai modifié mon code ainsi. A présent, j'ai
Code:
1 2 3 4 5 6 7
|
`sqlplus -s /nolog << EOF | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst
whenever sqlerror exit 2
whenever oserror exit 1
connect ${SC_ALIAS_LOGIN}/${SC_ALIAS_PWD}@${DB_BASE}
...
EOF` |
et lorsque je vire les "`", j'ai l'erreur décrite dans mon précedent msg. Peut être une erreur de syntaxe...
Sinon, s'il n'y a aucune incidence sur le comportement d'Oracle, je prendrai surement la solution de Jaouad.
Merci pour votre aide
Re: KSH - SQL plus : : Not Found
Citation:
Envoyé par Mella
Peut être une erreur de syntaxe...
oui peut-être
ici ça joue
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
$ cat x
#!/bin/ksh
REP=/tmp
DB_USER=LSC
table=t
Ver_Chg=1
SC_ALIAS_LOGIN=scott
SC_ALIAS_PWD=tiger++1
DB_BASE=LSC63
sqlplus -s /nolog << EOF | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst
whenever sqlerror exit 2
whenever oserror exit 1
connect ${SC_ALIAS_LOGIN}/${SC_ALIAS_PWD}@${DB_BASE}
...
EOF
$ ./x
$ cat /tmp/LSC.t1.lst
SP2-0042:unknowncommand"..."-restoflineignored.
$ |
Re: KSH - SQL plus : : Not Found
[quote="laurentschneider"]
Citation:
Envoyé par Mella
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
$ cat x
#!/bin/ksh
REP=/tmp
DB_USER=LSC
table=t
Ver_Chg=1
SC_ALIAS_LOGIN=scott
SC_ALIAS_PWD=tiger++1
DB_BASE=LSC63
sqlplus -s /nolog << EOF | tr -d " " > ${REP}/${DB_USER}.${table}${Ver_Chg}.lst
whenever sqlerror exit 2
whenever oserror exit 1
connect ${LOGIN}/${PWD}@${DB_BASE}
...
EOF
$ ./x
$ cat /tmp/LSC.t1.lst
SP2-0042:unknowncommand"..."-restoflineignored.
$ |
Non, je n'ai pas mis "..." dans ma requête, j'ai voulu abreger la requête dans le message. sinon, j'ai un
Code:
select * from table
Je comprends mieux l'eereur KSH. En fait, il considère le résultat de ma commande comme une commande KSH et essaye de l'exécuter... :oops: je viens juste de le comprendre. C'est aussi une piste à creuser[/code]