Oracle
 sql >> база данни >  >> RDS >> Oracle

Грешка при мутиране след задействане на вмъкване

В Oracle има две нива на тригери:ниво на ред и ниво на таблица.

Тригерите на ниво ред се изпълняват for each row . Тригери на ниво таблица, изпълнявани за оператор, дори ако операторът е променил повече от един ред.
В тригер на ниво ред не можете да изберете/актуализирате самата таблица, която има тригера:ще получите мутираща грешка.

В този случай няма нужда от оператор UPDATE. Просто опитайте това:

CREATE OR REPLACE TRIGGER aso_quote_cuhk_trigger
BEFORE INSERT
ON aso.aso_quote_headers_all
FOR EACH ROW
BEGIN
 :new.quote_expiration_date=sysdate+90;     
END;
/

РЕДАКТИРАНЕ Раджеш спомена, че е възможно, преди да вмъкне нов ред, OP да иска да актуализира всички други записи в aso_quote_headers_all таблица.

Е, това е осъществимо, но е малко сложно. За да направите това правилно, ще ви трябва

  1. Пакет pl/sql и променлива в заглавката на пакета, която е модифицирана от тригерите. Тази променлива може да бъде списък, съдържащ идентификаторите на нововмъкнати записи. Ниво на ред след тригера за вмъкване ще добави нов идентификатор към списъка. Съдържанието на тази променлива на пакета ще бъде различно за всяка различна сесия, така че нека наречем тази променлива session_variable .
  2. Ниво на ред след задействане на вмъкване, което ще добави нов идентификатор към session_variable .
  3. Ниво на таблица след задействане на вмъкване, което ще получи идентификатори от session_variable , обработете идентификатора и след това го премахнете от session_variable . Този тригер може да изпълни необходимите селекции/актуализации на aso_quote_headers_all. След като бъде обработен нововмъкнат идентификатор, този тригер трябва да гарантира, че той ще бъде премахнат от session_variable .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Процедура за извикване от оракул към кристален отчет

  2. Защо изборът от съхранена процедура не се поддържа в релационни бази данни?

  3. Жаба за Oracle..Как да изпълним множество изрази?

  4. Присъединяване на вложен цикъл в Oracle 11g

  5. Как да върна промените в моята база данни след ангажимент?