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

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

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

Код: 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
Скрипт update or insert по изменению только
    #38859323
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
laby,

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

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

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

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

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

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

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

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

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

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

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

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

То есть если в USING пустое множество, то ничего происходить не будет?
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38859475
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Скрипт update or insert по изменению только
    #38859481
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
labyДа, я не верю в Execute block

это ещё почему? Все вроде верят
...
Рейтинг: 0 / 0
Скрипт update or insert по изменению только
    #38859485
laby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Скрипт update or insert по изменению только
    #38859487
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
labyТо есть если в USING пустое множество, то ничего происходить не будет?

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

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

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

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

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

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


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