powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Возвращение результата из хранимой процедуры
7 сообщений из 7, страница 1 из 1
Возвращение результата из хранимой процедуры
    #34310825
nm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nm
Гость
Сервер:
Informix 9.4 на WinXP SP2
Клиент - winXp Sp2 + informix connect 2.90 TC6 (октябрь 2006 г.) + BDE 5.2

Запись в таблицу через хранимую процедуру в поле типа byte через BDE 5.2 проходит нормально, через ODBC (informix connect 2.90 TC6) - не проходит, молча без всяких сообщений об ошибке.
По условию нужно сделать вторым способом. В чем ошибка?

Процедура примерно такая:
create procedure procX(
x1 integer,
references byte
) returning integer as doc_cnt;

define xx integer;
.
let xx = xx + 1;
.
return xx;
end procedure;

Как видно, возвращается какое-то значение типа integer (счетчик ...).
Через BDE 5.2 на query.open в тексте программы - нормально
через ODBC - ошибка создания handle cursor ...
Да, sql в query такой - execute procedure procX(x1, x2);

Прошу помощи.
...
Рейтинг: 0 / 0
Возвращение результата из хранимой процедуры
    #34311064
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nm....
через ODBC - ошибка создания handle cursor ...
Через Ado? или?
...
Рейтинг: 0 / 0
Возвращение результата из хранимой процедуры
    #34313931
nm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nm
Гость
Не через ADO.
В порядке изучения ситуации сегодня установил, что
выполнение, например, в ServerStudio3.5 команды вида
select count(*), function_A(x1, x2) from table1
возвращает два столбца column1, column2.

Через BDE и TQuery - также.

Через ODBC и TQuery такой запрос не проходит - ошибка создания cursor handle.

Могут (с учетом того, что x2 - это references byte) на это влиять значения client_locale и db_locale в setnet? Сейчас они не заданы.
...
Рейтинг: 0 / 0
Возвращение результата из хранимой процедуры
    #34314227
nm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nm
Гость
Устанавливаю client_locale и db_locale в setnet в
ru_ru.CP1251.
Базу создаю через dbaccess (и там client_locale и db_locale = ru_ru.CP1251).
dbaccess->database->info->nls = ru_ru.1251
В источнике в ODBC client_locale и db_locale = ru_ru.CP1251, соединение проверяется успешно.

Через BDE идет, а через ODBC - нет.

Вот полный текст процедуры, которая (execute procedure setText(...)) через ODBC не выполняется, а возвращает ошибку
Error creating cursor handle.

create procedure setText(iop integer, iid integer, idata references byte) returning integer as res_code;
define cnt_use integer;
define isid integer;
let isid = dbinfo("sessionid");
select count(*) into cnt_use from i2_lock_doc where id_doc = iid and sid <> isid;
if (cnt_use > 0) then
return 1;
end if;
if (iop = 0) then
update i2_Docs_text set data = idata where id_doc= iid;
else
insert into i2_docs_text(data, id_doc) values(idata, iid);
end if;
return 0;
end procedure;
...
Рейтинг: 0 / 0
Возвращение результата из хранимой процедуры
    #34314245
vasilis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй другие ODBC-драйверы, в разных клиентах шли разные версии и даже двух типов.
Возможно, это проблема конкретного драйвера...
...
Рейтинг: 0 / 0
Возвращение результата из хранимой процедуры
    #34314318
nm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nm
Гость
Иду дальше:

Если на вход этой процедуры

create procedure setText(iop integer, iid integer, idata references byte) returning integer as res_code;

вместо idata давать null (execute procedure settext(100, 200, null) ), то в ODBC она выполняется нормально и возвращает значение.

ТОлько по смыслу работы там не должно быть null


Попробовал несколько драйверов - одинаково.

вот таблица, куда пишет setText:

create table "informix".docs_text
(
id SERIAL not null ,
id_doc INTEGER,
data BYTE in ol_nm,
primary key (id) constraint "informix".u111_25
)
...
Рейтинг: 0 / 0
Возвращение результата из хранимой процедуры
    #34317269
nm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
nm
Гость
Чем все кончилось?

Разбил хранимую процедуру на
два отдельных запроса:
select count(*) into cnt_use from i2_lock_doc where id_doc = iid and sid <> isid;

и

update i2_Docs_text set data = idata where id_doc= iid; / insert into i2_docs_text(data, id_doc) values(idata, iid);

Так под ODBC заработало.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Возвращение результата из хранимой процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]