#1 Le 24/10/2011, à 12:11
- Postmortem
[Résolu] Supprimer le "Connected." de la sortie d'un sqlplus
Salut,
Je cherche à récupérer la sortie d'un select dans une variable, j'ai donc fait comme ceci :
$ MA_VAR=`
sqlplus -s /nolog <<- FIN_SQL
connect user/pass
set FEEDBACK OFF
set PAGESIZE 0
select COL1 from MA_TABLE where COL2='TOTO';
exit
FIN_SQL
`
J'obtiens donc :
$ echo "${MA_VAR}"
Connected.
VALEUR1
VALEUR2
VALEUR3
Il y a donc ce vilain "Connected." qui m'embète...
Est-il possible de le supprimer de la sortie de sqlplus ?
Je peux toujours traiter ma variable après en supprimant la première ligne (avec grep -v ou avec sed ou avec l'expansion de paramètre ou je ne sais comment encore...) mais voilà, je voulais savoir si c'était possible directement dans sqlplus ?
Petites précisions :
Je suis en ksh (pas le choix, c'est comme ça au taf ! )
J'utilise les backquotes car si je passe ma commande sqlplus avec $( sqlplus...), j'obtiens une erreur !!
$ MA_VAR=$(
sqlplus -s /nolog <<- FIN_SQL
connect user/pass
set FEEDBACK OFF
set PAGESIZE 0
select COL1 from MA_TABLE where COL2='TOTO';
exit
FIN_SQL
)
$ echo "$MA_VAR"
Connected.
select COL1 from MA_TABLE where COL2="TOTO";
*
ERROR at line 1:
ORA-00904: "TOTO": invalid identifier
Je ne comprends pas pourquoi il me remplace les simples quotes autour de TOTO par des doubles !!
Dernière modification par Postmortem (Le 24/10/2011, à 14:45)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#2 Le 24/10/2011, à 12:16
- sputnick
Re : [Résolu] Supprimer le "Connected." de la sortie d'un sqlplus
Pour les quotes, t'a qu'à faire
man ascii
et tu met les quotes sous forme octale par exemple (voir doc oracle)
pour le connected, au cas où, ça change qq chose si tu pipe comme ça ?
sqlplus -s /nolog <<- FIN_SQL | cat -
(...)
Je sais que ca aide avec MySQL, avec un peu de chance...
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 24/10/2011, à 12:35
- Postmortem
Re : [Résolu] Supprimer le "Connected." de la sortie d'un sqlplus
Pour les quotes, t'a qu'à faire
man ascii
et tu met les quotes sous forme octale par exemple (voir doc oracle)
Bonne idéee mais ça me fait une autre erreur !
select COL1 from MA_TABLE where COL2='TOTO';
*
ERROR at line 1:
ORA-00911: invalid character
Mais bon, c'est pas grâve, je vais utiliser les backquotes.
pour le connected, au cas où, ça change qq chose si tu pipe comme ça ?
sqlplus -s /nolog <<- FIN_SQL | cat - (...)
Je sais que ca aide avec MySQL, avec un peu de chance...
Même résultat ! Y'a toujours "Connected."
Enfin, c'est pas bien embêtant, je vais le virer après.
Mais je me demandais quand même s'il y avait un truc du genre : set AFFICHAGE_CONNECTED OFF
Merci quand même sputnick !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#4 Le 24/10/2011, à 12:48
- Aldaris
Re : [Résolu] Supprimer le "Connected." de la sortie d'un sqlplus
Bonjour Postmortem,
Pourquoi ne pas simplement utiliser l'option -S de SQL*Plus ?
oracle /software/oracle>
# MA_VAR=`
> sqlplus -S /nolog <<- EOSQL
> conn /
> set FEED off
> set pages 0
> select * from dual ;
> exit
> EOSQL
> `
oracle /software/oracle>
# echo $MA_VAR
X
[Serveur] Intel Core i5 2500K / 8Go RAM / 6To sur ZFS
[Client] Apple MacBook Unibody
Hors ligne
#5 Le 24/10/2011, à 14:24
- Postmortem
Re : [Résolu] Supprimer le "Connected." de la sortie d'un sqlplus
Bonjour Postmortem,
Pourquoi ne pas simplement utiliser l'option -S de SQL*Plus ?
Parce que je ne connaissais pas l'option -S et que :
$ man sqlplus
No manual entry for sqlplus.
Et de toute manière, ça me donne exactement le même résultat.
Merci quand même !
C'est quoi la différence entre -S et -s ??
Edit : Pas de différences entre -S et -s apparemment.
Et chose étrange, je viens d'essayer exactement les mêmes commandes mais à partir d'un user Unix différent et là, le "Connected." a bien disparu ! (que ça soit en utilisant -s ou -S)
Va comprendre !! Doit y avoir un souci dans l'environnement du user que j'utilisais ?!?...
Merci en tout cas et désolé du dérangement !
Dernière modification par Postmortem (Le 24/10/2011, à 14:43)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#6 Le 24/10/2011, à 14:53
- Aldaris
Re : [Résolu] Supprimer le "Connected." de la sortie d'un sqlplus
Parce que je ne connaissais pas l'option -S et que :
$ man sqlplus No manual entry for sqlplus.
Effectivement, Oracle ne fait pas tout à fait les choses comme tout le monde, on est obligé de faire
sqlplus --help
pour obtenir un tout petit peu d'aide sur leurs outils depuis la ligne de commande...
C'est quoi la différence entre -S et -s ??
Apparemment, il s'agit de la même option
Le truc étrange c'est que sur mes systèmes SQL*Plus semble ne pas avoir le même comportement que sur le votre ... Quelle est la version du client Oracle que vous utilisez ??
Sinon une autre méthode est de passer par un fichier temporaire, je sais c'est un peu moche, mais ça marche à coup sûr
oracle /home/oracle>
# sqlplus -S /nolog <<EOSQL >> /tmp/temp_$$.sql
conn /
set FEED off
set pages 0
select * from dba_users where username= 'SYSTEM' ;
exit
EOSQL
oracle /home/oracle>
# MA_VAR=$(cat /tmp/temp_$$.sql | grep -v Connected)
oracle /home/oracle>
# echo $MA_VAR
SYSTEM 5 DDA12E6F3D8ACA6E OPEN TOOLS TEMP 12-APR-11 DEFAULT SYS_GROUP
[Serveur] Intel Core i5 2500K / 8Go RAM / 6To sur ZFS
[Client] Apple MacBook Unibody
Hors ligne
#7 Le 24/10/2011, à 16:01
- Postmortem
Re : [Résolu] Supprimer le "Connected." de la sortie d'un sqlplus
Je pense que le souci venait du user Unix que j'utilisais.
Avec un autre user, l'option -s supprime bien l'affichage du "Connected."
Ce qui m'a mis la puce à l'oreille, c'est que ton exemple fonctionnait bien chez toi mais pas chez moi. De plus, quand je faisais sqlplus --help, j'avais une tripottée de messages d'erreurs... Chose que je n'ai pas avec le nouveau user que j'utilise.
Merci bien Aldaris !
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne