web-dev-qa-db-fra.com

Instruction sqlplus en ligne de commande

Est-il possible de faire quelque chose comme ça?

$ sqlplus -s user/pass "select 1 from dual" ou
$ echo "select 1 from dual" | sqlplus -s user/pass

Je sais que je peux mettre select 1 from dual dans un fichier et procédez comme suit:
$ sqlplus -s user/pass @myFile.sql

mais je me demande s'il est réellement nécessaire de créer un fichier juste pour satisfaire sqlplus

46
andersonbd1

Sachez simplement que sous Unix/Linux, votre nom d'utilisateur/mot de passe peut être vu par toute personne pouvant exécuter la commande "ps -ef" si vous le placez directement sur la ligne de commande. Pourrait être un gros problème de sécurité (ou devenir un gros problème de sécurité).

Je recommande généralement de créer un fichier ou d'utiliser le document ici afin de protéger le nom d'utilisateur/mot de passe contre l'affichage avec la commande "ps -ef" sous Unix/Linux. Si le nom d'utilisateur/mot de passe est contenu dans un fichier de script ou un fichier SQL, vous pouvez le protéger en utilisant les autorisations de lecture utilisateur/groupe appropriées. Ensuite, vous pouvez conserver l'utilisateur/passer à l'intérieur du fichier comme ceci dans un script Shell:

sqlplus -s /nolog <<EOF
connect user/pass
select blah;
quit
EOF
51
David Mann

Je suis capable d'exécuter votre requête exacte en m'assurant simplement qu'il y a un point-virgule à la fin de mon instruction select. (La sortie est réelle, les paramètres de connexion supprimés.)

echo "select 1 from dual;" | sqlplus -s username/password@Host:1521/service 

Sortie:

         1
----------
         1

Notez que cela devrait avoir de l'importance, mais que cela fonctionne sous Mac OS X Snow Leopard et Oracle 11g.

31
Grant Lammi

Ma version

$ sqlplus -s username/password@Host:port/service <<< "select 1 from dual;"


         1
----------
         1

MODIFIER:

Pour plusieurs lignes, vous pouvez utiliser cette

$ echo -e "select 1 from dual; \n select 2 from dual;" | sqlplus -s username/password@Host:port/service


         1
----------
         1


         2
----------
         2
24
rofrol

Je suppose que c'est * nix?

Utilisez "ici document":

sqlplus -s user/pass <<+EOF
select 1 from dual;
+EOF

EDIT: J'aurais dû essayer votre deuxième exemple. Cela fonctionne aussi (même sous Windows, sans ticks):

$ echo 'select 1 from dual;'|sqlplus -s user/pw

         1
----------
         1


$
8
DCookie