6

次のように、open/print を使用して、sqlplus を使用して SQL ステートメントを実行しています。

open (PLSQL, "|sqlplus -s $db_url");
print PLSQL <<ENDSQL;
... some SQL statements ...
exit;
ENDSQL
close(PLSQL);

私の質問は、エラーが発生した場合に SQL ステートメントを実行する終了コードを取得する方法です。DBI を使用する方がはるかに優れていると思いますが、上記の問題に対する解決策があることを好みます。どうもありがとう!

4

3 に答える 3

7

close()あなたが知りたいことを教えてください:

ファイルハンドルがパイプで開かれたものである場合、関連する他のシステムコールのいずれかが失敗した場合、またはそのプログラムがゼロ以外のステータスで終了した場合、close は false を返します。唯一の問題が、プログラムがゼロ以外で終了したことだった場合、$! 0 に設定されます。パイプを閉じると、パイプで実行されているプロセスが終了するのも待機し (後でパイプの出力を確認したい場合に備えて)、そのコマンドの終了ステータス値を暗黙的に $? に入れます。および ${^CHILD_ERROR_NATIVE}。

主なポイントは、close()エラーに対して false を返し$!、syscall にエラーがあった場合にのみ$?設定され、終了ステータスに設定されることです。詳細については、perlvarのエラー変数を参照してください。

于 2012-09-04T19:22:08.270 に答える