sql >> Databasteknik >  >> RDS >> Oracle

ORA-04076:ogiltig NEW eller OLD specifikation - PL/SQL - Oracle Trigger

Du måste använda :NEW och :OLD varje gång du hänvisar till kolumnerna som infogas.

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;

När du använder WHEN -klausul, du kan inte använda NEW som en bindningsvariabel som anges här (sök efter 'WHEN-sats'):

Så följande borde fungera också:

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;



  1. JPA eller Hibernate för att generera ett kolumnvärde (icke primärnyckel), som inte börjar från 1

  2. Högsta utseende av ett värde inom varje grupp

  3. Infoga tid med tidszon sommartid

  4. cx_Oracle:Hur itererar jag över en resultatuppsättning?