powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / оператор insert
25 сообщений из 60, страница 1 из 3
оператор insert
    #38630989
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть одно неудобство при использовании Insert. Не всегда понятно какое значение к какому полю относится. Особенно когда полей много.
У Update такой проблемы нет.
Имхо было бы более читабельно писать типа такого:
Код: sql
1.
insert into T values (F1 = :F1, F2 = :F2, ..., FN = :FN)


Чтобы было видно какие значения куда пишутся, без подсчёта запятых.
...
Рейтинг: 0 / 0
оператор insert
    #38630992
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeЧтобы было видно какие значения куда пишутся, без подсчёта запятых.
Именно поэтому лично я обычно пишу его в две строки, давая параметрам имена, совпадающие
по длине с именами полей. Счёт запятых преращается в тривиальную задачу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
оператор insert
    #38631001
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovСчёт запятых преращается в тривиальную задачу.
Как только полей больше трёх, так считать становится скучновато. Более десяти - уже челендж :)
...
Рейтинг: 0 / 0
оператор insert
    #38631008
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

вроде как IBE подсказку делает. А с претензиями это к разработчикам SQL стандарта
...
Рейтинг: 0 / 0
оператор insert
    #38631010
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeБолее десяти - уже челендж :)
Да ну?
Код: sql
1.
2.
3.
insert into t
( F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, F16, F17, F18) values
(:P1,:P2,:P3,:P4,:P5,:P6,:P7,:P8,:P9,:P10,:P11,:P13,:P14,:P15,:P16,:P17,:P18)


Для тебя челендж заметить недостающий параметр в этом примере с восемнадцатью полями?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
оператор insert
    #38631026
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
insert into T
(Id, Guid, "Time", Str, "Float", PrevId) values
(GEN_ID('G_T', 1), '{FAFB893E-8878-4709-98F4-459E7C4A59FC}', current_timestamp, Null, 198.3675483, select max(Id) from T)


Добавить ещё пяток полей, и начнётся скукота.
...
Рейтинг: 0 / 0
оператор insert
    #38631031
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неиспользующие параметры - ССЗБ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
оператор insert
    #38631212
Insert-Update
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NickDee,
Удобнее была бы почти полная аналогия update:
Код: plsql
1.
2.
3.
4.
5.
insert/update/update or insert Tablename T set 
  T.F1 = :F1, 
  T.F2 = :F2, 
  ...,
  T.FN = :FN


Вот тока не стандартно оно. А это само по себе уже сильное обоснование ненужности ;)
...
Рейтинг: 0 / 0
оператор insert
    #38631257
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Insert-UpdateВот тока не стандартно оно. А это само по себе уже сильное обоснование ненужности ;)
Подождём пока это не станет стандартом? :)
...
Рейтинг: 0 / 0
оператор insert
    #38631696
Insert-Update
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NickDeeПодождём пока это не станет стандартом? :)
Или пока кто-то не проспонсирует конкретно эту фичу. Так как это только синтаксический сахар - может даже и не дорого выйдет
...
Рейтинг: 0 / 0
оператор insert
    #38632086
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Insert-UpdateИли пока кто-то не проспонсирует конкретно эту фичу
-1
Так недолго дожить и до нового SQL-языка Firebird ;)
...
Рейтинг: 0 / 0
оператор insert
    #38632119
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если уж и прямая подсказка ДСа непонятна, то
хотя бы расскажите ламерам про комментарии.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
оператор insert
    #38632272
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeКак только полей больше трёх, так считать становится скучновато.вот и не пиши более трех в одну строку. "Прачо" вообще спич?
NickDeeИмхо было бы более читабельно писать типа такого:Как в эту читабельную хрень впихнуть select? insert into () select .. from...?

баловство.
...
Рейтинг: 0 / 0
оператор insert
    #38632450
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyКак в эту читабельную хрень впихнуть select?
Никак.
Я предлагаю расширить синтаксис обычного insert. Т.е. insert from select останется как был. Таких инсертов кстати меньше процента.
...
Рейтинг: 0 / 0
оператор insert
    #38632553
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Я предлагаю расширить синтаксис обычного insert.

Тебе уже подсказали целых два варианта, не менее удобных и наглядных.

NickDee> Таких инсертов кстати меньше процента.

Тем более в сад.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
оператор insert
    #38632691
Insert-Update
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов РустамТебе уже подсказали целых два варианта, не менее удобных и наглядных.
Тем более в сад.

Не менее удобных чем что?
PS: если не понятна мысль/идея - лучше сначала хотя бы уточнить. Сад оно конечно не колыма, но осадочек остаётся...
...
Рейтинг: 0 / 0
оператор insert
    #38632742
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Insert-Update> Не менее удобных чем что?

Не менее удобных, чем варианты типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
insert ... set
  F1 = :F1, 
  F2 = :F2, 

-- или 

insert ... values(
  F1 = :F1, 
  F2 = :F2, 



> PS: если не понятна мысль/идея - лучше сначала хотя бы уточнить

Кому непонятно - тот пусть и уточняет, как вот ты сейчас.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
оператор insert
    #38632759
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамInsert-Update> Не менее удобных чем что?

Не менее удобных, чем варианты типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
insert ... set
  F1 = :F1, 
  F2 = :F2, 

-- или 

insert ... values(
  F1 = :F1, 
  F2 = :F2, 



Ещё раз:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
insert into T(
  Id, 
  Guid, 
  "Time", 
  Str, 
  "Float", 
  PrevId
) values (
  GEN_ID('G_T', 1), 
  '{FAFB893E-8878-4709-98F4-459E7C4A59FC}', 
  current_timestamp, 
  Null, 
  198.3675483, 
  select max(Id) from T
)

vs
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
insert into T values(
  Id = GEN_ID('G_T', 1), 
  Guid = '{FAFB893E-8878-4709-98F4-459E7C4A59FC}', 
  "Time" = current_timestamp, 
  Str = Null,
  "Float" = 198.3675483, 
  PrevId = select max(Id) from T
)

or
Код: sql
1.
2.
3.
4.
5.
6.
7.
insert into T set
  Id = GEN_ID('G_T', 1), 
  Guid = '{FAFB893E-8878-4709-98F4-459E7C4A59FC}', 
  "Time" = current_timestamp, 
  Str = Null,
  "Float" = 198.3675483, 
  PrevId = select max(Id) from T
...
Рейтинг: 0 / 0
оператор insert
    #38632990
anpl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeГаджимурадов РустамInsert-Update> Не менее удобных чем что?

Не менее удобных, чем варианты типа

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
insert ... set
  F1 = :F1, 
  F2 = :F2, 

-- или 

insert ... values(
  F1 = :F1, 
  F2 = :F2, 



Ещё раз:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
insert into T(
  Id, 
  Guid, 
  "Time", 
  Str, 
  "Float", 
  PrevId
) values (
  GEN_ID('G_T', 1), 
  '{FAFB893E-8878-4709-98F4-459E7C4A59FC}', 
  current_timestamp, 
  Null, 
  198.3675483, 
  select max(Id) from T
)

vs
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
insert into T values(
  Id = GEN_ID('G_T', 1), 
  Guid = '{FAFB893E-8878-4709-98F4-459E7C4A59FC}', 
  "Time" = current_timestamp, 
  Str = Null,
  "Float" = 198.3675483, 
  PrevId = select max(Id) from T
)

or
Код: sql
1.
2.
3.
4.
5.
6.
7.
insert into T set
  Id = GEN_ID('G_T', 1), 
  Guid = '{FAFB893E-8878-4709-98F4-459E7C4A59FC}', 
  "Time" = current_timestamp, 
  Str = Null,
  "Float" = 198.3675483, 
  PrevId = select max(Id) from T



Согласен не совсем удобно! И сама идея хорошая )))
Но. никто не мешает все значения добавить в переменные, а потом
Код: sql
1.
2.
insert into T (Id, Guid, "Time", Str, "Float", PrevId)
value          (:vId,:vGuid,:vTime,:vStr,:vFloat,:vPrevId)
...
Рейтинг: 0 / 0
оператор insert
    #38632992
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут уже при имеющимся синтаксисе вариантов море, а тебе еще надо?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
insert into T(
  Id, 
  Guid, 
  "Time", 

  Str, 
  "Float", 
  PrevId

) values (

  GEN_ID('G_T', 1), 
  '{FAFB893E-8878-4709-98F4-459E7C4A59FC}', 
  current_timestamp, 

  Null, 
  198.3675483, 
  select max(Id) from T

)


Код: sql
1.
2.
3.
4.
5.
6.
7.
insert into T(
  Id,   Guid,   "Time", 
  Str,  "Float", PrevId
) values (
  GEN_ID('G_T', 1), '{FAFB893E-8878-4709-98F4-459E7C4A59FC}', current_timestamp, 
  Null, 198.3675483, select max(Id) from T
)


Код: sql
1.
2.
3.
4.
5.
6.
7.
insert into T(
  Id,                        Guid,                            "Time", 
  Str,     "Float",         PrevId
) values (
  GEN_ID('G_T', 1), '{FAFB893E-8878-4709-98F4-459E7C4A59FC}', current_timestamp, 
  Null, 198.3675483, select max(Id) from T
)


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
insert into T(
  Id, 
  Guid, 
  "Time", 
  Str, 
  "Float", 
  PrevId
) values (
  GEN_ID('G_T', 1), --id
  '{FAFB893E-8878-4709-98F4-459E7C4A59FC}', -- Guid
  current_timestamp, --Time
  Null, --Str
  198.3675483, --Float
  select max(Id) from T --PrevId
)
...
Рейтинг: 0 / 0
оператор insert
    #38633015
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а где деньги?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
оператор insert
    #38633050
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anplНо. никто не мешает все значения добавить в переменные, а потом
Код: sql
1.
2.
insert into T (Id, Guid, "Time", Str, "Float", PrevId)
value          (:vId,:vGuid,:vTime,:vStr,:vFloat,:vPrevId)


И вместо одного запроса получим три:
1. select GEN_ID('G_T', 1) from rdb$database
2. select max(Id) from T
3. собственно insert

Это не конструктивно.
...
Рейтинг: 0 / 0
оператор insert
    #38633073
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

есть такой оператор merge

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
merge into T
using (
  select
    next value for G_T as Id,
    '{FAFB893E-8878-4709-98F4-459E7C4A59FC}' as Guid,
    current_timestamp as "Time",
    Null as Str,
    198.3675483 as "Float",
    (select max(Id) from T) as PrevId
  from rdb$database  
) src
on T.Id = Src.Id
when not mathed then
  insert (Id, Guid, "Time", Str, "Float", PrevId) 
  values (Src.Id, Src."Time", Src.Str, Src."Float", Src.PrevId)
...
Рейтинг: 0 / 0
оператор insert
    #38633079
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

блин Guid забыл
...
Рейтинг: 0 / 0
оператор insert
    #38633081
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyТут уже при имеющимся синтаксисе вариантов море, а тебе еще надо?
А что бы ты сказал, если бы синтаксис update был бы как у insert? Т.е. сначала в одних скобках перечислим все поля, а во вторых скобках перечислим значения, типа:
Код: sql
1.
update T set (Str, "Float") to ('Str', "Float" * 2) where Id = 1 


Я так понимаю, что если бы составители sql-стандарта в своё время прописали именно такой синтаксис, то весь мир бы сейчас писал именно так, и считал бы это удобным. Все бы считали запятые, писали в столбик, или использовали параметры. А я бы так же предложил расширить синтаксис update до человеко-ориентированного. И вы возможно точно так же сопротивлялись бы :)
...
Рейтинг: 0 / 0
25 сообщений из 60, страница 1 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / оператор insert
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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