1

SQLテーブルから選択カウントを持つSQLファイルを実行し、antのsqlplusを使用して変数に保存しようとしています。

ora:sqlplus  dir="${basedir}" start="${sql_count_table_name}.sql" silent="true"
  logon="${sql_username}/${sql_password}@${sql_database}" 
  failonerror="false" resultproperty="tablecount">
</ora:sqlplus

ただし、テーブル カウントは変数 tablecount に割り当てられません。

4

1 に答える 1

1

これによると、次のresultPropertyとおりです。

コマンドのリターン コードを格納するプロパティの名前

...したがって、クエリした値ではなく、SQL*Plus から終了コードを取得します。スクリプトに複数のクエリ、または複数の列を含むクエリがある場合、何を設定すると予想されますか?

COLUMNSQL*PlusコマンドのNEW_VALUE構文を使用して置換変数を作成することで、終了ステータスを覆すことができます。

column table_count new_value my_exit_code
select count(*) as table_count from ...
exit &my_exit_code

...しかし、実際のエラーを検出する能力は失われます。


編集:終了コードが制限されていることを忘れていました。SQL*Plus のドキュメントから:

一部のオペレーティング システムでは、オペレーティング システムのリターン コードの範囲も制限されています。これにより、プラットフォーム間での EXIT n および EXIT 変数の移植性が制限されます。たとえば、UNIX では、戻りコード用のストレージは 1 バイトしかありません。したがって、戻りコードの範囲は 0 から 255 に制限されます。

したがって、常に非常に小さいカウントを期待していない限り、これは機能しません。また、値を変更するため、ゼロ/非ゼロが意味を持つことに依存することさえできません。

実際にはカウントは気にしないかもしれません。何かの存在をテストしているだけかもしれません。その場合、次のようなことができます。

select least(count(*), 1) as table_count from ...

... 行がない場合は 0 の終了コードが返され、行がある場合は 1 が返されます。

于 2012-08-02T14:50:36.520 に答える