Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

sputnick a écrit :

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.

sputnick a écrit :

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 ? smile

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

Aldaris a écrit :

Bonjour Postmortem,

Pourquoi ne pas simplement utiliser l'option -S de SQL*Plus ? smile

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

Postmortem a écrit :

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...

Postmortem a écrit :

C'est quoi la différence entre -S et -s ??

Apparemment, il s'agit de la même option big_smile

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 smile


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