Oracle
 sql >> Baza danych >  >> RDS >> Oracle

PLSQL - Iinsert w wyzwalaczu powodujący pętlę rekurencyjną

Twoja aktualna logika uruchamia sam wyzwalacz przy każdej INSERT w nim!

Być może więc szukasz INSTEAD OF wyzwalać za pomocą VIEW

create or replace TRIGGER trg_INSERTKEYWORDS
INSTEAD OF INSERT ON Keyword

To tak, jakby zamiast rzeczywistej wstawki na widoku zrobić to, co powiem w mojej logice wyzwalania!

Widok:

CREATE VIEW MYVIEW AS 
SELECT
  LISTAGG(keyword,',') WITHIN GROUP (ORDER BY seq) as keyword,
  some_code
 FROM  Keyword
GROUP BY some_code;

Wyzwalacz:

create or replace TRIGGER trg_INSERTKEYWORDS
INSTEAD OF INSERT ON MYVIEW 
FOR EACH ROW
DECLARE
varKeyWordsStr VARCHAR2 (255) := 'Hello,How,are,you,keeping';
/* Isn't it keyWord from the inserted value ?? */
BEGIN
  FOR k IN (SELECT REGEXP_SUBSTR (varKeyWordsStr,'[^,]+',1,LEVEL) keyWord
             FROM DUAL
            CONNECT BY REGEXP_SUBSTR (varKeyWordsStr,'[^,]+',1,LEVEL)IS NOT NULL)
  LOOP
      INSERT INTO KEYWORD VALUES(seqKeyWord.NEXTVAL,k.keyWord,1000);
  END LOOP;
END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Plan wykonania SQL procedury składowanej

  2. Oracle SQL - Klauzula IN wyświetla wszystkie rekordy podane w warunku IN, nawet jeśli danych nie ma w tabeli

  3. ORA-16789:błędnie skonfigurowane logi w trybie czuwania

  4. NEXT_DAY() Funkcja w Oracle

  5. Jak mogę znaleźć, które tabele odwołują się do danej tabeli w Oracle SQL Developer?