このようなことをすることは可能ですか?
$ 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を満たすためだけに実際にファイルを作成する必要があるかどうか疑問に思っています
Unix/Linuxでは、コマンドラインに直接配置すると、「ps -ef」コマンドを実行できるユーザーがユーザー名/パスワードを見ることができることに注意してください。大きなセキュリティ問題になる可能性があります(または大きなセキュリティ問題に変わります)。
Unix/Linuxで「ps -ef」コマンドを使用して表示されることからユーザー名/パスワードを保護できるように、通常はファイルを作成するか、ここでドキュメントを使用することをお勧めします。ユーザー名/パスワードがスクリプトファイルまたはsqlファイルに含まれている場合、適切なユーザー/グループの読み取りアクセス許可を使用して保護できます。次に、シェルスクリプトで次のようにファイル内にユーザー/パスを保持できます。
sqlplus -s /nolog <<EOF
connect user/pass
select blah;
quit
EOF
Selectステートメントの最後にセミコロンがあることを確認するだけで、正確なクエリを実行できます。 (出力は実際であり、接続パラメーターは削除されます。)
echo "select 1 from dual;" | sqlplus -s username/password@Host:1521/service
出力:
1
----------
1
これは重要ですが、これはMac OS X Snow LeopardおよびOracle 11gで実行されていることに注意してください。
私のバージョン
$ 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
これは* 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
$