sql >> Databáze >  >> RDS >> Oracle

ORA-04076:neplatná NOVÁ nebo STARÁ specifikace - PL/SQL - Oracle Trigger

Musíte použít :NEW a :OLD pokaždé, když odkazujete na sloupce, které jsou vloženy.

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;

Když používáte WHEN -klauzule, nemůžete použít NEW jako proměnnou vazby, jak je uvedeno zde (hledejte „klauzuli WHEN“):

Mělo by tedy fungovat i následující:

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. Resetujte součet, když je v Oracle splněna podmínka

  2. mysqlexception byla neošetřena - K tomuto připojení je již přidružen otevřený DataReader, který je třeba nejprve zavřít

  3. Jak zkopírovat data velké tabulky do jiné tabulky v SQL Server

  4. Jak změnit obsah v div na základě výběru z rozbalovací nabídky