2014-11-10 4 views
1

키워드 표에 삽입 할 때 실행되는 트리거가 있습니다. 핵심 단어는 문자열로 사용되며 쉼표로 구분됩니다. 각 값을 구분 한 다음 각 값에 표에 삽입 해보십시오. 그러나 삽입물을 실행할 때 오류가 발생합니다.PLSQL - 반복 루프를 유발하는 트리거에서 Iinsert

내 트리거

create or replace TRIGGER trg_INSERTKEYWORDS 
BEFORE INSERT ON Keyword 
FOR EACH ROW 
DECLARE 
varKeyWordsStr VARCHAR2 (255) := 'Hello,How,are,you,keeping'; 
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; 

하지만 난 KEYWORD로 삽입에 대한 트리거 중이 트리거가 KEYWORD 테이블에 삽입되는 오류

Error starting at line : 2 in command - INSERT INTO KEYWORD VALUES(75,'SDFSDF',1000) Error report - SQL Error: ORA-00036: maximum number of recursive SQL levels (50) exceeded ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 4 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 ORA-04088: error during execution of trigger 'SW3.TRG_INSERTKEYWORDS' ORA-06512: at "SW3.TRG_INSERTKEYWORDS", line 8 00036. 00000 - "maximum number of recursive SQL levels (%s) exceeded" *Cause: An attempt was made to go more than the specified number of recursive SQL levels. *Action: Remove the recursive SQL, possibly a recursive trigger.

답변

2

현재 논리는 내부의 모든 INSERT에 트리거 자체를 계속 실행합니다!

그래서, 아마도 당신은 내 트리거 로직에게 무엇을보기 대신 실제 인서트, 뷰

create or replace TRIGGER trg_INSERTKEYWORDS 
INSTEAD OF INSERT ON Keyword 

그것은처럼를 사용하여 INSTEAD OF 트리거를 봐!

보기 :

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

트리거 :

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; 
+0

오류 : ORA-25002는 대신 테이블에 대한 OF 트리거를 만들 수 없습니다. –

+0

다른 아이디어는 INSERT에 대한보기를 만들 수 없습니까? –

+0

죄송합니다. 어떤 의미입니까 –

1

를 얻을. 트리거에있는 각 INSERT가 트리거를 다시 발생시킨 다음 모든 INSERT를 다시 시도하고 트리거를 다시 실행하는 등의 작업을 수행합니다. 솔직히 ORA-04091을 얻지 못했지만 놀랍습니다. 테이블 오류를 돌연변이,하지만 뭐든간에. 기본적으로 트리거 중간에 트리거가 정의 된 테이블에 삽입하지 마십시오.

공유하고 즐기십시오.

관련 문제