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