INFORMIXDBでいくつかのストアドプロシージャ/関数を実行する際に問題が発生しました。私はさまざまなクライアントで試しましたが、それらはすべて同じでした-これの代わりに、実行時にエラーを検出する人は誰もいません-空の応答を返します。そして、これは私にはうまくいきません。
最後に、次のようなPERL DBI
設定オプションがあることがわかりました。RaiseError
{ PrintError => 0, RaiseError => 1 }
そして、これは完璧に機能します。unixODBC C API
しかし、 libに相当するものはありますか(残念ながら、何も見つかりませんでした) ?
さらに:私はと同じクエリを試しましたがisql
、同じです!エラーはありません。結果は空です:\おそらく、構成する必要のあるオプションである可能性があります(でodbc.ini
、私は推測します)?
編集:わかりました、ここにいくつかの詳細があります:
バージョン:unixODBC 2.3.0
CREATE FUNCTION "test".NOK_func_k() RETURNING LVARCHAR(1000);
set debug file to '/home/directory_does_not_exists/unknown.log';
trace off;
trace on;
trace off;
return 'result is set here';
END FUNCTION;
CREATE PROCEDURE "test".NOK_proc_k(pDummy SMALLINT)
set debug file to '/home/directory_does_not_exists/unknown.log';
trace off;
trace on;
LET pDummy = 2;
trace off;
END PROCEDURE;
そして、とからの結果isql
はODBC C API
同じです。ここに詳細がありC API
ます:
Executing: execute procedure NOK_proc_k(1)
retcode = SQL_ERROR SQL_SUCCEEDED( retcode ) = 0
--------------------------------------------------
Executing: execute function NOK_func_k()
retcode = SQL_SUCCESS SQL_SUCCEEDED( retcode ) = 1
--------------------------------------------------
--------------------------------------------------
Executing: execute function NOK_proc_k(1)
retcode = SQL_ERROR SQL_SUCCEEDED( retcode ) = 0
--------------------------------------------------
Executing: execute procedure NOK_func_k()
retcode = SQL_SUCCESS SQL_SUCCEEDED( retcode ) = 1
--------------------------------------------------
--------------------------------------------------
Executing: call NOK_proc_k(1)
retcode = SQL_ERROR SQL_SUCCEEDED( retcode ) = 0
--------------------------------------------------
Executing: call NOK_func_k()
retcode = SQL_SUCCESS SQL_SUCCEEDED( retcode ) = 1
SQLMoreResults
戻るためのすべての呼び出しSQL_NO_DATA
、すべてSQLFetch
戻るSQL_ERROR
。
まとめ-間違ったプロシージャへの呼び出しはすべて問題ありません-エラーが返されます。ただし、このエラーがストアド関数にある場合、エラーは検出されません。これの代わりに-EMPTY文字列が返されます。アウトチ!
SQL_SUCCESS_WITH_INFO
どこにも返されません。そして、他の多くのエラーについてはこのようになっています(もちろん、すべてではありませんが、これは単なる例です)
そしてさらに!次のような手順または機能:
CREATE PROCEDURE "test".nok_proc_k_2() RETURNING LVARCHAR(1000);
DEFINE vNotDefined VARCHAR(10);
LET vNotDefined = current;
END PROCEDURE;
Aqua DB studioはエラーを返しますが、エラーは返しません。
Converted value does not fit into the allotted space
答え:
私はボヒカの答えを受け入れます。それは正しく、そのPERL DBI
部分について正しく答えているからです。また、彼は本当に私を助けてくれました(ヒットstrace
)。
とにかく、本当の解決策はここにはありません。関連する質問に投稿しました。これは、特定のケースについてより具体的で分離されています。同じエラーがストアド**プロシージャ**で検出されますが、ストアド**関数**では検出されません。