Этот вопрос связан с моим предыдущим: эквивалент 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'
не возвращается, вместо этого возвращается пустая строка (''
)..
Выполнение call func()
дает те же результаты, что и execute function func();
Вызов SQLMoreResults
возвращает SQL_NO_DATA
, SQLFetch
возвращает SQL_ERROR
.
Любые идеи?
unixODBC
,C API
? Извините, я забыл упомянуть об этом здесь. - person Kiril Kirov   schedule 27.07.2011