powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / DB2: Вызов хранимой процедуры через ODBC
5 сообщений из 5, страница 1 из 1
DB2: Вызов хранимой процедуры через ODBC
    #32871822
Road Runner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые, помогите советом!

Пытаюсь написать программу на Си - используя ODBC нужно вызвать процедуру.

При этом запросы вида select * from table и процедуры без параметров (call funcname() ) - отрабатывают, проверял. Как только параметры - не отрабатывает. Это может какая-то известная бага? Вызываю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
// Build statement.
sprintf( Statement, "call NSI.GDEPO(51, 5101)");
reg_log_msg(Statement);

// Execute the statement.
sqlrc = SQLPrepare(hstmt, Statement, SQL_NTS);
sprintf(msg, "Preparing SPOPZ with simply sqlexec. SQLRC= %d", sqlrc);
reg_log_msg(msg);	

sqlrc = SQLExecute(hstmt);
sprintf(msg, "Execute SPOPZ with simply sqlexec. SQLRC= %d", sqlrc);
reg_log_msg(msg);	

При этом строка
Код: plaintext
call NSI.GDEPO( 51 ,  5101 )
из командной строки db2 выполняется (так же как и из quest central или control center).

Подробное сообщение об ошибке дает следующую информацию:
[IBM][CLI Driver][DB2/NT] SQL1109N The specified DLL "NSI.GDEPO" could not be loaded.

Кто-нибудь сталкивался с таким? Или как решить вопрос с запуском процедуры через ODBC из программы на Си.
...
Рейтинг: 0 / 0
DB2: Вызов хранимой процедуры через ODBC
    #32871845
Road Runner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почитал тут еще хелпов, подумал, что уточнение может иметь значение:
процедура вызывается с удаленного сервера, никаких прав кроме коннекта к DB2 и вызова этой процедуры - нет. Впрочем сейчас я ее тестирую у себя на локальной машине - те же симптомы, вроде бы. Пробовал аналогично коннектиться к MS SQL серверу - выполняются на ура как sql выражения так и вызовы процедур.
...
Рейтинг: 0 / 0
DB2: Вызов хранимой процедуры через ODBC
    #32872172
Nikolay Kulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая DB2???
...
Рейтинг: 0 / 0
DB2: Вызов хранимой процедуры через ODBC
    #32872181
Road Runner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за внимание. Решил проблему. :)
Решение нашел тут .


Finally, the prolem came from mismatch between DB2CLI and ODBC "Unlike ODBC, DB2 CLI
does not support literals as procedure arguments, parameter markers must be used.


Работает в таком виде (во всяком случае SQLExecute возвращает 0):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
// Build statement.
sprintf( Statement, "call NSI.GDEPO(?, ?)");

// Preparing the statement.
sqlrc = SQLPrepare(hstmt, Statement, SQL_NTS);
sprintf(msg, "Preparing SPOPZ with link parameters. SQLRC= %d", sqlrc);
reg_log_msg(msg);	

// bind parameters
sqlrc = SQLBindParameter( hstmt,  1 , SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,  2 ,  0 ,
								DR,  3 , &LenOrInd);
if (SQL_SUCCESS != sqlrc && SQL_SUCCESS_WITH_INFO != sqlrc) return(- 1 );
sprintf(msg, "Bind parameter #1");
reg_log_msg(msg);	

sqlrc = SQLBindParameter( hstmt,  2 , SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,  4 ,  0 ,
								RETSTATUS,  5 , &LenOrInd);
if (SQL_SUCCESS != sqlrc && SQL_SUCCESS_WITH_INFO != sqlrc) return(- 1 );
sprintf(msg, "Bind parameter #2");
reg_log_msg(msg);	

//set parameters
sprintf(DR, "51");
sprintf(RETSTATUS, "5101");

//execute state
sqlrc = SQLExecute(hstmt);
sprintf(msg, "Execute SPOPZ with simply sqlexec. SQLRC= %d", sqlrc);
reg_log_msg(msg);	


ЗЫ: Интересно, на форуме похожих тем не нашлось, либо все знают про этот бак и молчат, либо никто не использует ODBC для работы с базой... либо никто не использует хранимых процедур.
...
Рейтинг: 0 / 0
DB2: Вызов хранимой процедуры через ODBC
    #32872185
Road Runner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nikolay KulikovКакая DB2??? Сорри. 7.2 под windows
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / DB2: Вызов хранимой процедуры через ODBC
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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