Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORA-04076:Ungültige NEW- oder OLD-Spezifikation – PL/SQL – Oracle Trigger

Sie müssen :NEW verwenden und :OLD jedes Mal, wenn Sie sich auf die eingefügten Spalten beziehen.

CREATE OR REPLACE TRIGGER ManageCall
    AFTER INSERT 
    ON STATE_CHANGE
    FOR EACH ROW
    DECLARE
    x_coord NUMBER;
    y_coord NUMBER;
    BEGIN
    IF :NEW.ChangeType='C' THEN
        SELECT X, Y INTO x_coord, y_coord
        FROM TELEPHONE t
        WHERE t.PHONENO = :NEW.PHONENO;
    END IF;
    END;

Wenn Sie den WHEN verwenden -Klausel können Sie NEW nicht als Bindevariable verwenden, wie angegeben hier (Suche nach 'WHEN-Klausel'):

Folgendes sollte also auch funktionieren:

CREATE OR REPLACE TRIGGER ManageCall
    AFTER INSERT 
    ON STATE_CHANGE
    FOR EACH ROW
    WHEN (NEW.ChangeType='C')
    DECLARE
    x_coord NUMBER;
    y_coord NUMBER;
    BEGIN
        SELECT X, Y INTO x_coord, y_coord
        FROM TELEPHONE
        WHERE PHONENO = :NEW.PHONENO;
    END;