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

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


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


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