Можно сделать триггер только один раз для многократной вставки в оракула? - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь отправить письмо для вставки в таблицу.У меня есть несколько вставок в мае .pdc.

Можем ли мы это сделать?

Я пытался вставить несколько записей одновременно.

INSERT ALL
  INTO mytable (column1, column2, column_n) VALUES ('John', 123, 'Lloyds Office')
  INTO mytable (column1, column2, column_n) VALUES ('Jane', 124, 'Lloyds Office')
  INTO mytable (column1, column2, column_n) VALUES ('Billy', 125, 'London Office')
SELECT * FROM dual;

Но он все еще срабатывает триггер 3время.

Триггер, который я написал, таков.

CREATE OR REPLACE TRIGGER myschema."my_trigger"
AFTER INSERT OR UPDATE OR DELETE ON myschema.mytable
 begin
   ----- email notification here
 END;

Спасибо.

И я пишу .pdc, в котором я пишу несколько вставок для таблицы при выполненииЭто .Он срабатывает много раз, так как DML происходит многократно.

Я прочитал много блоков, но не нашел такого ответа.

Можем ли мы заставить его выстрелить только один раз?

РЕДАКТИРОВАТЬ

ДЛЯ ОБНОВЛЕНИЯ

update mytable  set column2 = 123 where column1=  'first';
update mytable  set column2 = 124 where column1=  'second';
update mytable  set column2 = 125 where column1=  'first';
commit;

Как мы можем сделать то же самое для обновления?Спасибо

1 Ответ

0 голосов
/ 26 сентября 2018

Проблема в том, что INSERT ALL выполняет каждую ветвь как отдельный оператор.Итак, это ...

INSERT ALL
  INTO mytable (column1, column2, column3) VALUES ('John', 123, 'Lloyds Office')
  INTO mytable (column1, column2, column3) VALUES ('Jane', 124, 'Lloyds Office')
  INTO mytable (column1, column2, column3) VALUES ('Billy', 125, 'London Office')
SELECT * FROM dual;

... на самом деле три оператора INSERT, поэтому ваш триггер уровня операторов срабатывает три раза.

Если вы хотите вставить несколько строк в один оператор, вам нужно использовать синтаксис INSERT INTO ... SELECT, например:

INSERT INTO mytable (column1, column2, column3)
select 'John', 123, 'Lloyds Office' from dual
union all 
select 'Jane', 124, 'Lloyds Office' from dual
union all 
select 'Billy', 125, 'London Office' from dual
;

В этом примере используется пустая таблица Oracle DUAL длясоздайте одну строку и оператор UNION ALL, чтобы объединить несколько операторов SELECT в один набор результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...