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


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

вроде как IBE подсказку делает. А с претензиями это к разработчикам SQL стандарта
...
Рейтинг: 0 / 0
01.05.2014, 19:22:03
    #38631010
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
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
01.05.2014, 19:53:39
    #38631026
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
Код: 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
01.05.2014, 20:08:02
    #38631031
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
Неиспользующие параметры - ССЗБ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.05.2014, 03:38:41
    #38631212
Insert-Update
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
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
02.05.2014, 10:14:16
    #38631257
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
Insert-UpdateВот тока не стандартно оно. А это само по себе уже сильное обоснование ненужности ;)
Подождём пока это не станет стандартом? :)
...
Рейтинг: 0 / 0
03.05.2014, 07:59:48
    #38631696
Insert-Update
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
NickDeeПодождём пока это не станет стандартом? :)
Или пока кто-то не проспонсирует конкретно эту фичу. Так как это только синтаксический сахар - может даже и не дорого выйдет
...
Рейтинг: 0 / 0
03.05.2014, 21:46:44
    #38632086
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
Insert-UpdateИли пока кто-то не проспонсирует конкретно эту фичу
-1
Так недолго дожить и до нового SQL-языка Firebird ;)
...
Рейтинг: 0 / 0
03.05.2014, 22:41:17
    #38632119
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
Если уж и прямая подсказка ДСа непонятна, то
хотя бы расскажите ламерам про комментарии.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.05.2014, 12:00:04
    #38632272
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
NickDeeКак только полей больше трёх, так считать становится скучновато.вот и не пиши более трех в одну строку. "Прачо" вообще спич?
NickDeeИмхо было бы более читабельно писать типа такого:Как в эту читабельную хрень впихнуть select? insert into () select .. from...?

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

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

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

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

Не менее удобных чем что?
PS: если не понятна мысль/идея - лучше сначала хотя бы уточнить. Сад оно конечно не колыма, но осадочек остаётся...
...
Рейтинг: 0 / 0
05.05.2014, 08:00:04
    #38632742
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
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
05.05.2014, 08:41:15
    #38632759
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
Гаджимурадов Рустам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
05.05.2014, 11:50:59
    #38632990
anpl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
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
05.05.2014, 11:52:20
    #38632992
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
Тут уже при имеющимся синтаксисе вариантов море, а тебе еще надо?
Код: 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
05.05.2014, 12:01:52
    #38633015
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
а где деньги?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.05.2014, 12:26:38
    #38633050
NickDee
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
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
05.05.2014, 12:39:51
    #38633073
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
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
05.05.2014, 12:41:30
    #38633079
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
оператор insert
Симонов Денис,

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


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


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