powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / insert returning в insert-е
20 сообщений из 20, страница 1 из 1
insert returning в insert-е
    #38954864
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
«Непонятные люди требуют странного» ©

Вроде бы очевидный синтаксис не поддерживается:
Код: sql
1.
2.
3.
4.
5.
6.
insert into DETAL (
  MASTER_ID, FLD1, FLD2, ...
) values (
  (insert into MASTER (...) values (...) returning ID),
  val1, val2, ...
)


Довольно часто встречается ситуация, когда в детальной таблице обязательно нужна хотя бы одна запись для каждой из мастера.
Конечно, можно выполнить эти 2 insert -а на клиенте, в execute block или SP.
Но ведь так более явно короче и понятнее. :)

Почему бы не научить сервер понимать подобный синтаксис?
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38954883
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TonalНо ведь так более явно короче и понятнее. :)
Лично мне - отнюдь не понятнее. И, кстати, ситуация тоже весьма редкая. В моей лично
практике ни разу не встречалась.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38954975
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tonal,

смысла в такой конструкции будет мало, потому как детальной таблице обычно больше одной записи
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955047
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениссмысла в такой конструкции будет мало, потому как детальной таблице обычно больше одной записи
Ну, это тоже зависит от многого.
Я частенько встречаюсь с табличками где деталей < 1,5 на мастер...
Кроме того, ежели заменить insert into MASTER ... на update or insert into MASTER то можно будет все детали вставлять подобным образом.
Особливо ежели запилить в update or insert синтаксис позволяющий не только устанавливать поля в константы, но и изменять их значения на основе предыдущих, типа как set fld1 = fld1 + 1 в update .

Опять же, подобного поведения можно добиться несколькими путями - например триггерами на insert и update в изменяемой вьюхе.
Но в этом случае будет компактнее. :)

Ещё открывающиеся возможности:
Удаление с записью в журнал:
Код: sql
1.
2.
3.
4.
5.
6.
insert into DELETED_OBJ (
  OBJ_ID, TABLE_NAME
) values (
  (delete from TABLE where ID = :id returning ID),
  'TABLE'
)



Изменение с записью в журнал:
Код: sql
1.
2.
3.
4.
5.
6.
insert into UPDATED_OBJ (
  OBJ_ID, TABLE_NAME, MODYFY
) values (
  (update TABLE set ... where ID = :id returning ID),
  'TABLE', CURRENT_DATETIME
)


И много других извращений. :)
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955050
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TonalИ много других извращений. :)
Открой для себя триггера. В отличии от твоих извращений, они работают вне зависимости от
настроения левой пятки программиста приложения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955055
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TonalУдаление с записью в журнал:
Код: sql
1.
2.
3.
4.
5.
6.
insert into DELETED_OBJ (
  OBJ_ID, TABLE_NAME
) values (
  (delete from TABLE where ID = :id returning ID),
  'TABLE'
)



...
И много других извращений. :)

да чего уж там. Сразу вот так

Код: sql
1.
2.
3.
4.
5.
insert into T(
  ID
) values (
  (delete from T where ID = :id returning ID)
)



и вгоняем БД в полный ступор
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955063
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov[Открой для себя триггера. В отличии от твоих извращений, они работают вне зависимости от
настроения левой пятки программиста приложения.

Э... А как триггера защищены от "настроения левой пятки программиста"?
Да и мёртвый цикл запилить что на триггерах что на SP тоже не велика сложность. :)
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955078
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TonalА как триггера защищены от "настроения левой пятки программиста"?

Правами. Программист может использовать удаление с протоколированием или удалить
по-тихому. Но протоколирование удаления триггерами ему не обойти.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955087
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
А триггера видимо пишет кто-то непогрешимый? :)
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955142
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tonal,

Если разработчиков больше одного, то базу данных и клиентское приложение пишут зачастую разные люди. Ошибается, конечно, каждый, но триггер-то один, и он - единожды отлаженный - будет работать для каждого обновления/удаления с любого места программы, исключая ситуацию когда часть изменеий протоколируется, а часть - нет.
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955402
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonline,
Ну по задаче там идеально подошла бы изменяемая въюха с триггером на инсерт.
Но задача - единоразовый импорт.
Далее, по логике основной задачи, когда данные уже заполнены, эта въюха попросту не нужна.
Там даже триггера особо не нужны кроме стандартных автоинкрементных. Ну и каскадного удаления...

И вместо того, чтобы нарисовать один, пусть сложный, запрос, предлагается запилить въюху с триггерами?
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955505
Фотография Секретное имя пользователя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tonalmiwaonline,
Ну по задаче там идеально подошла бы изменяемая въюха с триггером на инсерт.
Но задача - единоразовый импорт.
Далее, по логике основной задачи, когда данные уже заполнены, эта въюха попросту не нужна.
Там даже триггера особо не нужны кроме стандартных автоинкрементных. Ну и каскадного удаления...

И вместо того, чтобы нарисовать один, пусть сложный, запрос, предлагается запилить въюху с триггерами?из-за того, что тебе лень пилить взгляд (вьюху), ты хочешь напрячь разработчиков, чтобы они расхерачили сервер твоими хотелками ?
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955586
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tonalmiwaonline,
Ну по задаче там идеально подошла бы изменяемая въюха с триггером на инсерт.
Но задача - единоразовый импорт.
Далее, по логике основной задачи, когда данные уже заполнены, эта въюха попросту не нужна.
Там даже триггера особо не нужны кроме стандартных автоинкрементных. Ну и каскадного удаления...

И вместо того, чтобы нарисовать один, пусть сложный, запрос, предлагается запилить въюху с триггерами?
Нарисуй один (не)сложный execute block.
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955625
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonlineНарисуй один (не)сложный execute block.
Собственно с этого я и начал, что вместо "(не)сложный execute block " можно было бы нарисовать ещё более несложный каскадный insert .
И этот каскадный insert даже более защищён от ошибок чем execute block , хотя бы потому что текста меньше. :)

Секретное имя пользователяиз-за того, что тебе лень пилить взгляд (вьюху), ты хочешь напрячь разработчиков, чтобы они расхерачили сервер твоими хотелками ?
Мне не лень "пилить вьюху" - она там совершенно не нужна.
И естественно сервер расхерачивать не нужно.

Я просто предлагаю к обсуждению напрашивающуюся, как мне кажется, оптимизацию синтаксиса: возможность использовать операторы изменения с фразой returning как значения в других операторах.
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955674
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tonal,

лучше бы появилась возможно использовать for insert/update/delete/merge returning для обработки множества строк
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955710
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TonalЯ просто предлагаю к обсуждению напрашивающуюся, как мне кажется, оптимизацию синтаксиса: возможность использовать операторы изменения с фразой returning как значения в других операторах.
Пообсуждать-то можно.

Например - а какова глубина вложенности должна поддерживаться у каскадных inserto-ов? А почему только 2/10/100/1000? А вдруг я хочу сделать удобный лично мне супер-мега-динамический insert где значение последующего элемента вычисляется на основании предыдущего значения?
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955795
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonlineНапример - а какова глубина вложенности должна поддерживаться у каскадных inserto-ов? А почему только 2/10/100/1000? А вдруг я хочу сделать удобный лично мне супер-мега-динамический insert где значение последующего элемента вычисляется на основании предыдущего значения?
Это всяко определять разработчикам. :)
Но мнится мне, что никак не больше текущего ограничения на количество контекстов - вроде кардинального отличия от вложенных select -ов в этом разрезе не видно...
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955808
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tonal,

был уже однажды подобный топик, только там предлагалось

Код: sql
1.
2.
3.
4.
5.
insert into DETAL (
  MASTER_ID, FLD1, FLD2, ...
)
select ID, val1, val2
from (insert into MASTER (...) values (...) returning ID)



кое кто так вроде даже умеет. ЕМНИП эти предложения были посланы в сад. И видимо правильно, потому что если разрешить это, то тогда справедливо будет разрешить и

Код: sql
1.
2.
select ID, val1, val2
from (insert into MASTER (...) values (...) returning ID)



и при недофетченности курсора получаем мутный результат
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955840
Фотография Tonal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
Код: sql
1.
2.
select ID, val1, val2
from (insert into MASTER (...) values (...) returning ID)


и при недофетченности курсора получаем мутный результат
Вроде как мои предложения лишены этого недостатка.
Т. е. returning остаётся как есть но может выступать и как отдельное значение.

Конечно в этом случае можно изобразить что-то в таком роде:
Код: sql
1.
2.
select (insert into MASTER (...) values (...) returning ID), val1...
from ...


В результате чего можно получить тот же мутный результат при недофетченности курсора.
Но того же можно добиться и execite block -ом, да и SP, и это вроде никого не пугает.
А новичкам быстро объясняют про грабли недофетченного курсора + изменяющие SP или execite block .
...
Рейтинг: 0 / 0
insert returning в insert-е
    #38955899
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениси при недофетченности курсора получаем мутный результат
не обязательно, можно принудительно материализовывать "внутрях" выборки из returning-запросов
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / insert returning в insert-е
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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