|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
Добрый день! Решили перейти с FB2.5на FB4. Столкнулись с ошибкой "Cursor is not open" при выполнении такой конструкции на клиенте INSERT INTO RETURNING ID Как решить эту проблему? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 10:48 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
pasergey, правильно выполнять запрос, он теперь возвращает курсор. Как вы его выполняете ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 10:51 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
Добрый день! Запрос вида: INSERT INTO C_TMP (id) VALUES(1) RETURNING id подключение к базе и запуск запроса проходит нормально, но при попытке выполнить фетч isc_dsql_fetch, выводится ошибка: -502 Cursor is not open ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 11:02 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
p_s_v, ещё раз - как именно выполняется запрос ? Если речь зашла об isc_dsql_fetch(), то значит какое-то понимание об ISC API присутствует. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 11:25 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
hvladон теперь возвращает курсор. Разве это не только в пятёрке?.. p_s_vпри попытке выполнить фетч isc_dsql_fetch, выводится ошибка: -502 Cursor is not open Не надо выполнять фетч, этот запрос возвращает синглетон. Достаточно isc_dsql_execute2. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 12:43 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
Вызов идет в следующем порядке: 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 и вываливается ошибка } из-за параметров транзакции не может быть проблемы? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 13:18 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
p_s_vа как понять, что нужно вызывать isc_dsql_execute2 ? Если запрос возвращает синглетон (включая select, возвращающий одну запись) - можно вызывать isc_dsql_execute2. Если запрос не возвращает курсор (процедура или в данном случае returning) - его нужно вызывать. PS: А вот за insert-select-returning не скажу. Он, кажется, в старых версиях вообще должен быть запрещён, а в новых - таки нормально возвращать курсор. Так что как ни крути, а выглядит багом. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 13:22 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
Та же ошибка и при запросе INSERT INTO VALUES () RETURNING ID но на FB2.5 все работало, именно на FB4.0 появилась проблема ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 13:31 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov А вот за insert-select-returning не скажу. Он, кажется, в старых версиях вообще должен быть запрещён ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 13:33 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
p_s_vно на FB2.5 все работало, именно на FB4.0 появилась проблема Вернись на 2.5 и проследи вызывается ли там isc_dsql_fetch. Хотя, как я уже сказал, выглядит как баг. Фетч при вызове неселективной процедуры обычно возвращал NO_DATA. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 13:35 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
p_s_v, оно и на 3.0 должно проявляться ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 13:35 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
Мимопроходящийон ещё в 2.0 появился, если не ошибаюсь. Сам RETURNING - да, но для запросов, которые могут обработать более одной записи он выкидывал ошибку то ли при выполнении то ли ещё при препарировании. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 13:37 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, код от версии сервера FB у нас не зависит, т.е. всегда вызывается isc_dsql_fetch т.е. запросы INSERT RETURNING нужно по другому обрабатывать - через isc_dsql_execute2 - попробую, и напишу результат.. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 13:40 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
p_s_vкод от версии сервера FB у нас не зависит, т.е. всегда вызывается isc_dsql_fetch Значит попробуй с сервером 4.0 использовать клиентскую библиотеку 2.5. Если будет работать - пиши тикет об изменившемся поведении ISC API. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 13:47 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Дим, точно такой же баг был в PDO драйвере для PHP и проявлялся он ещё на 3.0. Там просто добавили проверку типа оператора. Если он равен isc_info_sql_stmt_exec_procedure, то вызывали isc_dsql_execute2, без последующего isc_dsql_fetch ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 13:52 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov p_s_vкод от версии сервера FB у нас не зависит, т.е. всегда вызывается isc_dsql_fetch Значит попробуй с сервером 4.0 использовать клиентскую библиотеку 2.5. Если будет работать - пиши тикет об изменившемся поведении ISC API. с клиентской библиотекой 2.5 не подключается к FB4.0.... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 13:55 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
p_s_v, смотри мой пост выше ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 13:56 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
Симонов ДенисДим, точно такой же баг был в PDO драйвере для PHP и проявлялся он ещё на 3.0. Это-то понятно, я просто помню, что раньше это было не так и не уверен если изменение поведения API умышленное или побочка. С одной стороны, оно таки поменялось, с другой - старое поведение было местами озадачивающим, так что именно оно могло быть признано багом. Надо бы ещё посмотреть как новый Адрианов код взаимодействует с isc_dsql_execute2, но лень. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 13:58 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
p_s_vс клиентской библиотекой 2.5 не подключается к FB4.0.... Надо настройки клиента подрихтовать чтобы подключалось. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 13:59 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
p_s_v а как понять, что нужно вызывать isc_dsql_execute2 ? Это есть в доке по IB6, это есть в любых компонентах доступа, есть и тут 22383143 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 14:05 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov hvladон теперь возвращает курсор. Разве это не только в пятёрке?..Это я на текст ошибки реагировал. А так - да, курсор пока только в мастере. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 14:07 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
pasergey Как решить эту проблему? При переходе на 3-ку с полуторки isc_dsql_fetch на определенных запросах стал возвращать dsql_cursor_not_open = 336003095. Исследовал вопрос года полтора назад, когда только начинал переходить, поэтому что к чему и как уже не помню. Добавил игнор этой ошибки (просто выставляю флаг EOF). С тех пор проблем не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 14:25 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
ggreggory, кривой хак, а как надо было смотри выше ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2021, 15:09 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
Симонов Денис ggreggory, кривой хак, а как надо было смотри выше да, ошибку заглушить можно и вставка записи в базу пройдет, но я не получу результат, который возвращает RETURNING... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 09:44 |
|
Переход FB2.5 -> FB4: INSERT INTO RETURNING ID
|
|||
---|---|---|---|
#18+
Симонов Денис 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 всем спасибо!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2021, 09:48 |
|
|
start [/forum/topic.php?fid=40&fpage=3&tid=1559915]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 244ms |
total: | 389ms |
0 / 0 |