Этот вопрос связан с моим предыдущим: Эквивалент RaiseError (PERL, DBI) для unixODBC C API?
Поскольку я позже выделил проблему, я опубликую новый вопрос,более конкретный, изолированный и без лишней информации.
Версия: unixODBC 2.3.0
lib: unixODBC - C API
Предположим, у меня есть сохраненная ФУНКЦИЯ :
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;
И того же тела, но в сохранена ПРОЦЕДУРА :
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)
.
НО когда я выполняю эти 2 вызова через unixODBC (используя SQLExecute
),
execute procedure proc(1);
возвращает SQL_ERROR
(что ожидается и нормально), тогда как
execute function func();
возвращает SQL_SUCCESS
.. НО 'result is set here'
is not возвращено, вместо нее возвращается пустая строка (''
) ..
Выполнение call func()
дает те же результаты, что и execute function func();
Вызов SQLMoreResults
возвращает SQL_NO_DATA
, SQLFetch
возвращает SQL_ERROR
.
Есть идеи?