powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
25 сообщений из 25, страница 1 из 1
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104018
pasergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Решили перейти с FB2.5на FB4.

Столкнулись с ошибкой "Cursor is not open" при выполнении такой конструкции на клиенте
INSERT INTO
RETURNING ID

Как решить эту проблему?
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104020
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pasergey,

правильно выполнять запрос, он теперь возвращает курсор.
Как вы его выполняете ?
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104024
p_s_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Запрос вида:

INSERT INTO C_TMP (id)
VALUES(1)
RETURNING id

подключение к базе и запуск запроса проходит нормально,
но при попытке выполнить фетч isc_dsql_fetch, выводится ошибка: -502 Cursor is not open
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104045
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p_s_v,

ещё раз - как именно выполняется запрос ?

Если речь зашла об isc_dsql_fetch(), то значит какое-то понимание об ISC API присутствует.
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104079
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladон теперь возвращает курсор.

Разве это не только в пятёрке?..

p_s_vпри попытке выполнить фетч isc_dsql_fetch, выводится ошибка: -502 Cursor is not open

Не надо выполнять фетч, этот запрос возвращает синглетон. Достаточно
isc_dsql_execute2.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104097
p_s_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вызов идет в следующем порядке:

isc_attach_database(vErrorStatus,
strlen(cBasePath), cBasePath,
&pHandle, iDPB_Length, pcDPB);

char isc_tpb[] = {
isc_tpb_version3
, isc_tpb_concurrency
, isc_tpb_write
, isc_tpb_nowait
};


isc_start_transaction(
poIBConnect->vErrorStatus,
&pTransaction,
1,
pHandle,
(unsigned short)sizeof(isc_tpb),
isc_tpb);

isc_dsql_prepare(
oIBConnect->vErrorStatus,
&oIBTrans->pTransaction,
&stmt,
0,
(char*)sCmd[0],
oIBConnect->dialect,
sqldaResult);

isc_dsql_execute(
oIBConnect->vErrorStatus,
&oIBTrans->pTransaction,
&stmt,
oIBConnect->dialect,
sqldaParam);

bResult=isc_dsql_fetch(
((SQL_IBConnect*)poConnect)->vErrorStatus,
& stmt,
oIBConnect->dialect,
sqldaResult)==0; -- ошибка SQLCODE=-502 Cursor is not open


а как понять, что нужно вызывать isc_dsql_execute2 ?
код в программе это выглядит так:

{
USE_QUERY(pq);
pq->AddParam(id);
pq->AddResult(idNew);
pq->SetCommand("INSERT INTO C_TMP (ID)"
" SELECT GEN_ID(C_TMP_ID,1)"
" FROM C_TMP WHERE id = %"
" RETURNING ID");
pq->Run();
pq->Step(); -- вот здесь происходит isc_dsql_fetch и вываливается ошибка
}


из-за параметров транзакции не может быть проблемы?
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104100
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p_s_vа как понять, что нужно вызывать isc_dsql_execute2 ?

Если запрос возвращает синглетон (включая select, возвращающий одну запись) -
можно вызывать isc_dsql_execute2. Если запрос не возвращает курсор (процедура
или в данном случае returning) - его нужно вызывать.

PS: А вот за insert-select-returning не скажу. Он, кажется, в старых версиях вообще должен быть запрещён, а в новых - таки нормально возвращать курсор. Так что как ни крути, а выглядит багом.
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104103
p_s_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Та же ошибка и при запросе

INSERT INTO
VALUES ()
RETURNING ID


но на FB2.5 все работало, именно на FB4.0 появилась проблема
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104104
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
А вот за insert-select-returning не скажу. Он, кажется, в старых версиях вообще должен быть запрещён
он ещё в 2.0 появился, если не ошибаюсь.
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104107
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p_s_vно на FB2.5 все работало, именно на FB4.0 появилась проблема

Вернись на 2.5 и проследи вызывается ли там isc_dsql_fetch.

Хотя, как я уже сказал, выглядит как баг. Фетч при вызове неселективной
процедуры обычно возвращал NO_DATA.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104108
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p_s_v,

оно и на 3.0 должно проявляться
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104110
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийон ещё в 2.0 появился, если не ошибаюсь.

Сам RETURNING - да, но для запросов, которые могут обработать более одной записи
он выкидывал ошибку то ли при выполнении то ли ещё при препарировании.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104112
p_s_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

код от версии сервера FB у нас не зависит, т.е. всегда вызывается isc_dsql_fetch

т.е. запросы INSERT RETURNING нужно по другому обрабатывать - через isc_dsql_execute2
- попробую, и напишу результат..

Спасибо!
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104116
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p_s_vкод от версии сервера FB у нас не зависит, т.е. всегда вызывается isc_dsql_fetch

Значит попробуй с сервером 4.0 использовать клиентскую библиотеку 2.5. Если
будет работать - пиши тикет об изменившемся поведении ISC API.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104120
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Дим, точно такой же баг был в PDO драйвере для PHP и проявлялся он ещё на 3.0.
Там просто добавили проверку типа оператора. Если он равен isc_info_sql_stmt_exec_procedure, то вызывали isc_dsql_execute2, без последующего isc_dsql_fetch
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104122
p_s_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

p_s_vкод от версии сервера FB у нас не зависит, т.е. всегда вызывается isc_dsql_fetch

Значит попробуй с сервером 4.0 использовать клиентскую библиотеку 2.5. Если
будет работать - пиши тикет об изменившемся поведении ISC API.



с клиентской библиотекой 2.5 не подключается к FB4.0....
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104123
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p_s_v,

смотри мой пост выше
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104124
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисДим, точно такой же баг был в PDO драйвере для PHP и проявлялся он ещё на 3.0.

Это-то понятно, я просто помню, что раньше это было не так и не уверен если
изменение поведения API умышленное или побочка. С одной стороны, оно таки
поменялось, с другой - старое поведение было местами озадачивающим, так что
именно оно могло быть признано багом.

Надо бы ещё посмотреть как новый Адрианов код взаимодействует с
isc_dsql_execute2, но лень.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104125
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p_s_vс клиентской библиотекой 2.5 не подключается к FB4.0....
Надо настройки клиента подрихтовать чтобы подключалось.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104127
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p_s_v
а как понять, что нужно вызывать isc_dsql_execute2 ?
После prepare нужно получить info и посмотреть на тип запроса.
Это есть в доке по IB6, это есть в любых компонентах доступа, есть и тут 22383143
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104128
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
hvladон теперь возвращает курсор.

Разве это не только в пятёрке?..Это я на текст ошибки реагировал. А так - да, курсор пока только в мастере.
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104134
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pasergey

Как решить эту проблему?


При переходе на 3-ку с полуторки isc_dsql_fetch на определенных запросах стал возвращать dsql_cursor_not_open = 336003095. Исследовал вопрос года полтора назад, когда только начинал переходить, поэтому что к чему и как уже не помню. Добавил игнор этой ошибки (просто выставляю флаг EOF). С тех пор проблем не было.
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104145
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory,

кривой хак, а как надо было смотри выше
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104301
p_s_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис
ggreggory,

кривой хак, а как надо было смотри выше



да, ошибку заглушить можно и вставка записи в базу пройдет, но я не получу результат, который возвращает RETURNING...
...
Рейтинг: 0 / 0
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
    #40104304
p_s_v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис
Dimitry Sibiryakov,

Дим, точно такой же баг был в PDO драйвере для PHP и проявлялся он ещё на 3.0.
Там просто добавили проверку типа оператора. Если он равен isc_info_sql_stmt_exec_procedure, то вызывали isc_dsql_execute2, без последующего isc_dsql_fetch


- так получилось - сделал вызов isc_dsql_sql_info,
и если iStatement_Type==isc_info_sql_stmt_exec_procedure,
то вызываю isc_dsql_execute2,
а иначе как обычно isc_dsql_execute

всем спасибо!!!
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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