sql >> Database teknologi >  >> RDS >> Oracle

ORA-04076:ugyldig ny eller gammel specifikation - PL/SQL - Oracle Trigger

Du skal bruge :NEW og :OLD hver gang du henviser til de kolonner, der er indsat.

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 bruger WHEN -klausul, kan du ikke bruge NEW som bindevariabel som angivet her (søg efter 'WHEN-sætning'):

Så følgende burde også fungere:

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. SQL-brug kolonne fra undervalg i where-sætning

  2. Udtales det "S-Q-L" eller "Sequel"?

  3. Mysql sletning i en tabel ved id'er fra en anden tabel

  4. Hvad skal du gøre, når du har brug for heltal større end 20 cifre på mysql?