sql >> Databasteknik >  >> RDS >> Oracle

SQL-utlösare vid radering av muterande tabell

Testa att använda PRAGMA AUTONOMOUS_TRANSACTION i triggern.

Oracle doc:https://docs.oracle.com/ cd/B14117_01/appdev.101/b10807/13_elems002.htm

    CREATE OR REPLACE TRIGGER planes_del_trigg
            BEFORE DELETE ON planes
        DECLARE 
            CURSOR dist_cur IS
                SELECT distance
                FROM flights;
            v_dist flights.distance%TYPE;
            v_counter NUMBER(3);

 PRAGMA AUTONOMOUS_TRANSACTION;
        BEGIN
            OPEN dist_cur;
            LOOP
                FETCH dist_cur INTO v_dist;
                IF v_dist <= :OLD.range THEN
                    v_counter := v_counter + 1;
                END IF;
                EXIT WHEN dist_cur%NOTFOUND;
            END LOOP;
            CLOSE dist_cur;
            IF v_counter >= 3 THEN
                RAISE_APPLICATION_ERROR(-20501, 'This plane cannot be deleted!');
            END IF;
        END planes_del_trigg;



  1. Alternativ till att använda LIMIT nyckelord i en underfråga i MYSQL

  2. Hur man returnerar tabell från MySQL-funktionen

  3. Ändra ett Enum-fält med Alembic

  4. Resultat av SQL-datumkonvertering till ogiltig modellparameter för nummerformat.