Oracle
 sql >> Base de données >  >> RDS >> Oracle

PLSQL - Iinsert dans le déclencheur provoquant une boucle récursive

Votre logique actuelle continue de déclencher le déclencheur lui-même sur chaque INSERT qu'il contient !

Donc, vous cherchez peut-être un INSTEAD OF déclencheur à l'aide d'un VIEW

create or replace TRIGGER trg_INSERTKEYWORDS
INSTEAD OF INSERT ON Keyword

C'est comme si, au lieu de voir l'insert réel, faites ce que je dis dans ma logique de déclenchement !

Afficher :

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

Le déclencheur :

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;