web-dev-qa-db-ja.com

コマンドラインからのsqlplusステートメント

このようなことをすることは可能ですか?

$ sqlplus -s user/pass "select 1 from dual" または
$ echo "select 1 from dual" | sqlplus -s user/pass

select 1 from dualファイル内でこれを実行します。
$ sqlplus -s user/pass @myFile.sql

しかし、sqlplusを満たすためだけに実際にファイルを作成する必要があるかどうか疑問に思っています

46
andersonbd1

Unix/Linuxでは、コマンドラインに直接配置すると、「ps -ef」コマンドを実行できるユーザーがユーザー名/パスワードを見ることができることに注意してください。大きなセキュリティ問題になる可能性があります(または大きなセキュリティ問題に変わります)。

Unix/Linuxで「ps -ef」コマンドを使用して表示されることからユーザー名/パスワードを保護できるように、通常はファイルを作成するか、ここでドキュメントを使用することをお勧めします。ユーザー名/パスワードがスクリプトファイルまたはsqlファイルに含まれている場合、適切なユーザー/グループの読み取りアクセス許可を使用して保護できます。次に、シェルスクリプトで次のようにファイル内にユーザー/パスを保持できます。

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

Selectステートメントの最後にセミコロンがあることを確認するだけで、正確なクエリを実行できます。 (出力は実際であり、接続パラメーターは削除されます。)

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

出力:

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

これは重要ですが、これはMac OS X Snow LeopardおよびOracle 11gで実行されていることに注意してください。

31
Grant Lammi

私のバージョン

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


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

編集:

複数行の場合、これを使用できます

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


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


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

これは* nixだと思いますか?

「here document」を使用します。

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

編集:私はあなたの2番目の例を試してみるべきでした。それも機能します(Windowsでも、ティックはありません):

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

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


$
8
DCookie