sql >> データベース >  >> RDS >> Oracle

PLSQL-トリガーにIinsertを挿入すると、再帰ループが発生します

    現在のロジックは、その中のすべてのINSERTでトリガー自体を起動し続けます!

    したがって、おそらくINSTEAD OFを探します VIEWを使用してトリガーする

    create or replace TRIGGER trg_INSERTKEYWORDS
    INSTEAD OF INSERT ON Keyword
    

    これは、ビュー上の実際の挿入の代わりに、トリガーロジックで指示したことを実行するようなものです!

    表示:

    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;
    


    1. PHPでMySQLクエリを除外する

    2. MariaDBでのTRUNCATE()のしくみ

    3. 日付、時刻を挿入するためのPHPMySQL構文

    4. Ubuntu16.04にMySQLWorkbenchをインストールして構成する