4

下の図は、シェルで sqlplus を実行したときに返されるものを示しています

シェル1

しかし、「実行」コマンドからこれを実行すると:

powershell.exe -noexit c:\sqltriggers\voicetrigger2.ps1

voicetrigger2.ps1 を次のように使用します。

$(sqlplus user/pass@OMP1 '@C:\sqltriggers\VOICEBLOCKTRIG.SQL');

私はこれを得る:

shell2

3バックを期待したい。問題は、それを変数として設定しようとすることです。整数がゼロより大きい場合は、BAT ファイルを実行します。しかし、SQLPlus が整数値だけを返しているとは思いません。実際にこれを返すと思います:

count(*)
      3

SQLplus コマンドから整数値を返すようにするにはどうすればよいですか?

4

4 に答える 4

1

SQL*Plus は何も返さず、クエリの結果を標準出力に表示しています。SQLスクリプトで3できることだけを表示する直接呼び出しを取得するには、バナーを非表示にするフラグを指定してSQL * Plusを呼び出します。おそらく、SQL スクリプトの最後に を付けて、プロンプトに留まらないようにすることもできます。set heading off-sexitSQL>

同じことが powershell 呼び出しにも当てはまりますが、そこでは別のことが起こっています。これ17は、追加の入力を待機しており、SQL スクリプト内のコマンドを実行していないことを意味する行番号です。これは、終了;または終了のないクエリ/、または終了のない PL/SQL ブロックのいずれかを示唆しています/。しかし、最初の例で実行した SQL とまったく同じである場合は、同じように動作するはずなので、少し奇妙です。SQL スクリプトの内容を質問に追加して、何が問題なのかを確認する必要があります。

私が考えることができる唯一のことは、コマンドlogin.sqlを含むが、2つの呼び出しから異なるファイルを取得する必要がある場合です...これは、powershellに独自の環境がある場合にもっともらしいです変数、おそらく。set sqlterminatorlogin.sql

于 2013-05-10T07:59:29.220 に答える
0
sqlplus -s /nolog <<EOF > query_result.txt 
set heading off feedback off pagesize 0 linesize 30000 trimout on ;

select 5 from dual;
exit;
EOF

for i in `cat query_result.txt `
do
exit $i
done
于 2014-10-02T17:09:15.547 に答える
-1

SET HEADING OFFファイルの先頭に追加してみてください。この回答を確認してください (投票数が 2 番目に多い回答を確認してください)

于 2013-05-10T03:54:29.347 に答える