这个问题与我之前的问题有关:RaiseError (PERL, DBI) equivalent for unixODBC C API?
当我稍后隔离问题时,我将发布新问题,即更具体、更孤立且没有不必要的信息。
版本:unixODBC 2.3.0
库:unixODBC - C API
假设我有一个存储的 FUNCTION:
CREATE FUNCTION "test".func() 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;
和相同的主体,但在存储的 PROCEDURE中:
CREATE PROCEDURE "test".proc(pDummy SMALLINT)
set debug file to '/home/directory_does_not_exists/unknown.log';
trace off;
trace on;
LET pDummy = 2;
trace off;
END PROCEDURE;
正如你所看到的,它们是完全一样的。调试文件的路径错误,因此预计会出错。当我call func()
从Aqua Data Studio
错误中执行时检测到:
Cannot open DEBUG file for SPL routine trace
对于call proc(1)
.
但是SQLExecute
当我通过 unixODBC(使用)执行这两个调用时
execute procedure proc(1);
返回SQL_ERROR
(这是预期的并且很好),而
execute function func();
返回SQL_SUCCESS
..但 'result is set here'
不返回,返回空字符串( ),而不是''
..
执行call func()
给出相同的结果,如execute function func();
调用SQLMoreResults
返回SQL_NO_DATA
,SQLFetch
返回SQL_ERROR
。
有任何想法吗?