Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Скрипт update or insert по изменению только / 25 сообщений из 102, страница 1 из 5
21.01.2015, 10:23
    #38859309
laby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
Здравствуйте!

Помогите сформировать скрипт.

К примеру, такой скрипт, он изменяет все записи или добавляет:

Код: sql
1.
2.
3.
4.
5.
6.
7.
update or insert into T (fld1, fld2, fld3, fld4, fld5, fld6, fld7)
values (1, 2, 3, 4, 5, 6, 7)
matching (fld1, fld2, fld3);

update or insert into T (fld1, fld2, fld3, fld4, fld5, fld6, fld7)
values (...)
matching (fld1, fld2, fld3);


...

А мне надо что-то типа такого:

Код: sql
1.
2.
3.
4.
5.
6.
7.
update or insert into T (fld1, fld2, fld3, fld4, fld5, fld6, fld7)
values (1, 2, 3, 4, 5, 6, 7)
matching (fld1, fld2, fld3)
if exists (select fld1 from T where fld1=1 and fld2=2 and fld3=3 and fld4=4 and fld5=5 and fld6=6 and fld7=7);

update or insert into T (fld1, fld2, fld3, fld4, fld5, fld6, fld7)
values ...



Но как это правильно написать (Firebird 2.5) ?
...
Рейтинг: 0 / 0
21.01.2015, 10:30
    #38859323
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
laby,

смотри merge
...
Рейтинг: 0 / 0
21.01.2015, 10:38
    #38859328
laby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
Спасибо, Денис.

Посмотрел merge - ничо ваще не понял.
...
Рейтинг: 0 / 0
21.01.2015, 10:58
    #38859357
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
laby,

Читать до просветления.
...
Рейтинг: 0 / 0
21.01.2015, 11:11
    #38859386
laby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
merge она тоже делает update или insert, а мне надо по условию - либо делать, либо нет
...
Рейтинг: 0 / 0
21.01.2015, 11:12
    #38859388
laby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
DarkMaster,

Я уже до помутнения прочитал
...
Рейтинг: 0 / 0
21.01.2015, 11:16
    #38859397
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
laby,

вообще то в merge можно не указывать предложение update, и тогда этот оператор и будет как раз таки производить вставку либо нет.
...
Рейтинг: 0 / 0
21.01.2015, 11:24
    #38859405
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
labyЯ уже до помутнения прочитал
а что читаешь, если не секрет?
...
Рейтинг: 0 / 0
21.01.2015, 11:24
    #38859406
laby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
Симонов Денис,

Не пойму что Вы мне предлагаете
мне надо по условию - по 7-ми полям - если по ним совпадение, то не делать ни update ни insert, а если нет совпадения то делать update если по 3-м полям совпадение или insert если записи с такими 3-мя полями нет.
...
Рейтинг: 0 / 0
21.01.2015, 11:25
    #38859408
laby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
kdvlabyЯ уже до помутнения прочитал
а что читаешь, если не секрет?

http://www.firebirdsql.org/refdocs/langrefupd21-merge.html
http://firebirdsql.su/doku.php?id=update_or_insert
...
Рейтинг: 0 / 0
21.01.2015, 11:26
    #38859413
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
...
Рейтинг: 0 / 0
21.01.2015, 11:32
    #38859432
laby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
kdv,

Спасибо, но хрен редьки не слаще
...
Рейтинг: 0 / 0
21.01.2015, 11:33
    #38859434
laby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
Походу задача нерешаемая!
...
Рейтинг: 0 / 0
21.01.2015, 11:44
    #38859453
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
labyмне надо по условию - по 7-ми полям - если по ним совпадение, то не делать ни
update ни insert, а если нет совпадения то делать update если по 3-м полям совпадение или
insert если записи с такими 3-мя полями нет.
Ну пиши EXECUTE BLOCK и там наворачивай свою через-жопу-хитровывернутую логику сколько хочешь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.01.2015, 11:44
    #38859454
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
laby,

execute block может что угодно. Но даже без него решение есть

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
MERGE INTO T
USING (SELECT
           1 AS FLD1,
           2 AS FLD2,
           3 AS FLD3,
           4 AS FLD4,
           5 AS FLD5,
           6 AS FLD6,
           7 AS FLD7
       FROM
           RDB$DATABASE
       WHERE NOT EXISTS(SELECT
                            *
                        FROM
                            T
                        WHERE FLD1 = 1
                          AND FLD2 = 2
                          AND FLD3 = 3
                          AND FLD4 = 4
                          AND FLD5 = 5
                          AND FLD6 = 6
                          AND FLD7 = 7)) SRC
ON T.FLD1 = SRC.FLD1
   AND T.FLD2 = SRC.FLD2
   AND T.FLD3 = SRC.FLD3
WHEN MATCHED THEN
    UPDATE SET FLD4 = SRC.FLD4,
               FLD5 = SRC.FLD5,
               FLD6 = SRC.FLD6,
               FLD7 = SRC.FLD7
WHEN NOT MATCHED THEN
    INSERT (
        FLD1,
        FLD2,
        FLD3,
        FLD4,
        FLD5,
        FLD6,
        FLD7)
    VALUES (SRC.FLD1,
            SRC.FLD2,
            SRC.FLD3,
            SRC.FLD4,
            SRC.FLD5,
            SRC.FLD6,
            SRC.FLD7)  



просто надо включать мозг. В трёшке это можно сделать немного проще
...
Рейтинг: 0 / 0
21.01.2015, 11:44
    #38859455
roadster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
labyПоходу задача нерешаемая!ХП
...
Рейтинг: 0 / 0
21.01.2015, 11:52
    #38859472
laby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
Симонов Денисlaby,

execute block может что угодно. Но даже без него решение есть

просто надо включать мозг. В трёшке это можно сделать немного проще

Да, я не верю в Execute block - там понятно if ...

А тут опупеть!!!

То есть если в USING пустое множество, то ничего происходить не будет?
...
Рейтинг: 0 / 0
21.01.2015, 11:55
    #38859475
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
lady,

хотя это merge сделает не совсем то что нужно. Пиши execute block.

В трёшке можно вот так выкрутится

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
MERGE INTO T
USING (SELECT
           1 AS FLD1,
           2 AS FLD2,
           3 AS FLD3,
           4 AS FLD4,
           5 AS FLD5,
           6 AS FLD6,
           7 AS FLD7
       FROM
           RDB$DATABASE) SRC
ON T.FLD1 = SRC.FLD1
   AND T.FLD2 = SRC.FLD2
   AND T.FLD3 = SRC.FLD3
WHEN MATCHED THEN
    UPDATE SET FLD4 = SRC.FLD4,
               FLD5 = SRC.FLD5,
               FLD6 = SRC.FLD6,
               FLD7 = SRC.FLD7
WHEN NOT MATCHED AND T.FLD4 <> 4 AND T.FLD5 <> 5 AND T.FLD6 <> 6 AND T.FLD7 <> 7  THEN
    INSERT (
        FLD1,
        FLD2,
        FLD3,
        FLD4,
        FLD5,
        FLD6,
        FLD7)
    VALUES (SRC.FLD1,
            SRC.FLD2,
            SRC.FLD3,
            SRC.FLD4,
            SRC.FLD5,
            SRC.FLD6,
            SRC.FLD7) 



А вообще задача странная.
...
Рейтинг: 0 / 0
21.01.2015, 11:57
    #38859481
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
labyДа, я не верю в Execute block

это ещё почему? Все вроде верят
...
Рейтинг: 0 / 0
21.01.2015, 11:58
    #38859485
laby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
Dimitry Sibiryakovlabyмне надо по условию - по 7-ми полям - если по ним совпадение, то не делать ни
update ни insert, а если нет совпадения то делать update если по 3-м полям совпадение или
insert если записи с такими 3-мя полями нет.
Ну пиши EXECUTE BLOCK и там наворачивай свою через-жопу-хитровывернутую логику сколько хочешь.


Через какую жопу???? Я просто хочу что если уже такая запись есть то не дергать триггера и не обновлять даты изменений

блок наверное так будет:

EXECUTE BLOCK
AS
BEGIN
if not exists (select fld1 from T where fld1=1 and fld2=2 and fld3=3 and fld4=4 and fld5=5 and fld6=6 and fld7=7) then
update or insert into T (fld1, fld2, fld3, fld4, fld5, fld6, fld7)
values (1, 2, 3, 4, 5, 6, 7)
matching (fld1, fld2, fld3);
END
...
Рейтинг: 0 / 0
21.01.2015, 11:59
    #38859487
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
labyТо есть если в USING пустое множество, то ничего происходить не будет?

не будет. Доку надо читать внимательнее.
...
Рейтинг: 0 / 0
21.01.2015, 12:00
    #38859488
stelvic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
labyДа, я не верю в Execute block - там понятно if ...

А что так? Религия?
...
Рейтинг: 0 / 0
21.01.2015, 12:02
    #38859495
laby
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
Симонов ДенисlabyДа, я не верю в Execute block

это ещё почему? Все вроде верят

Ну это как-то не совсем sql, - если да кабы, а не сразу хочу!
...
Рейтинг: 0 / 0
21.01.2015, 12:03
    #38859499
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
labyЯ просто хочу что если уже такая запись есть то не дергать триггера и не
обновлять даты изменений
Запись идентифицируется ключом. А у тебя - какой-то хренью.

И нет, нормальный блок будет не такой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
21.01.2015, 12:05
    #38859502
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скрипт update or insert по изменению только
laby,

а проктостоматологические задачи обычно через чистый SQL не решаются
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Скрипт update or insert по изменению только / 25 сообщений из 102, страница 1 из 5
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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