powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / план для update or insert
7 сообщений из 7, страница 1 из 1
план для update or insert
    #39157459
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не выдается план для запроса update or insert.

Например, пишем в SQL Editor

update or insert
into employee (emp_no, first_name, last_name)
values (:e, :f, :l)
matching (first_name, last_name)

жмем кнопку prepare, и ... пусто.

IBE любой версии, 2014, 2015 года, вплоть до самого свежего. Firebird 2.5.
...
Рейтинг: 0 / 0
план для update or insert
    #39157508
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

забыл добавить, что ISQL план для такого запроса выдает без проблем.
...
Рейтинг: 0 / 0
план для update or insert
    #39157600
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Причину, в общем, нашел. Пока не понял, как отличать INSERT от UPDATE OR INSERT - для обоих выдается один и тот же тип статемента (insert). А попытка получить план для обычного INSERT'a ожидаемо приводит к ошибке.
Она, конечно, легко давится, но есть ли более щадящий способ?
...
Рейтинг: 0 / 0
план для update or insert
    #39157630
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertкак отличать INSERT от UPDATE OR INSERT - для обоих выдается один и тот же тип статемента (insert).

кто выдаёт? Компоненты доступа?

Может допилить их чтобы был отдельный тип статмента.

Кстати для merge тоже план не даёт.
...
Рейтинг: 0 / 0
план для update or insert
    #39157635
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денискто выдаёт? Компоненты доступа?


Они, понятно. Но они isc_dsql_sql_info дергают, а не текст парсят.

Симонов ДенисКстати для merge тоже план не даёт.

Из той же оперы проблема, скорее всего.
...
Рейтинг: 0 / 0
план для update or insert
    #39157684
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertдля обоих выдается один и тот же тип статемента (insert)
Влад сказал, что действительно, update or insert "трактуется" как insert. Тем не менее, isql каким-то образом все-таки план выдает.
Вероятно, вместо игнорирования определенных типов запросов (всего кроме SQLSelect, SQLUpdate, SQLDelete) он в любом случае пытается получить план запроса. А если это выдало ошибку - то просто ничего не выводит (для просто insert isql ничего не выдает).
Я глянул IBX, там начало такое

Код: pascal
1.
2.
3.
4.
5.
 if (not Prepared) or
     (not (FSQLType in [SQLSelect, SQLSelectForUpdate,
       {TODO: SQLExecProcedure, }
       SQLUpdate, SQLDelete])) then
    result := ''


соответственно, SQLInsert автоматически выпадает. Тем не менее, дальше в коде обработка ошибок плана есть.
...
Рейтинг: 0 / 0
план для update or insert
    #39157700
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvВлад сказал, что действительно, update or insert "трактуется" как insert. Тем не менее, isql каким-то образом все-таки план выдает.


Да эксперт тоже уже выдает. Думал, может какой-то другой вариант есть, кроме как давить ошибку.
Получается, только анализировать текст запроса. В принципе, эксперт это умеет, и в SQL редакторе не будет пытаться получить план для простого инсерта. Но может где-то еще всплыть.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / план для update or insert
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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