sql >> Database >  >> RDS >> Oracle

ORA-04076:ongeldige NIEUWE of OUDE specificatie - PL/SQL - Oracle Trigger

Je moet :NEW . gebruiken en :OLD elke keer dat u verwijst naar de kolommen die zijn ingevoegd.

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;

Wanneer u de WHEN . gebruikt -clause, je kunt NEW niet gebruiken als bindvariabele zoals vermeld hier (zoek naar 'WHEN-clausule'):

Dus het volgende zou ook moeten werken:

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. Probleem bij het uitvoeren van een MySQL-verwijderinstructie in Java

  2. mysql concat_ws zonder duplicaten

  3. PHP MySQL Yii - database lezen niet schrijven

  4. MySQL illegale mix van sorteringen wanneer alles hetzelfde is verzameld