我在 INFORMIX DB 中执行一些存储过程/函数时遇到问题。我尝试了不同的客户端,它们都是相同的——没有人在执行时检测到错误,而不是这个——返回空响应。这对我不起作用。
最后,我发现可以PERL DBI
选择 set 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 工作室返回
Converted value does not fit into the allotted space
回答:
我会接受 bohica 的回答,因为它是正确的,并且它对这部分的回答是正确的PERL DBI
。此外,他真的帮助了我(命中strace
)。
无论如何,真正的解决方案不在这里。我已将其发布在相关问题中,该问题对特定情况更为具体和孤立:在存储的**过程**中检测到相同的错误,但在存储的**函数**中未检测到