Oracle
 sql >> база данни >  >> RDS >> Oracle

ORA-04076:невалидна НОВА или СТАРА спецификация - PL/SQL - Oracle Trigger

Трябва да използвате :NEW и :OLD всеки път, когато препращате към вмъкнатите колони.

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;

Когато използвате WHEN -клауза, не можете да използвате NEW като променлива за свързване, както е посочено тук (потърсете „клауза WHEN“):

Така че следното също трябва да работи:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да задам време за изчакване на @lock в jpa заявка за пролетни данни?

  2. Как мога условно да конструирам име на таблица за оператор SQL CREATE TABLE?

  3. Защо не можем да изпълним съхранена процедура в оператора select в oracle? има ли сериозна причина?

  4. Как да изведем резултат от оператор SELECT, който се изпълнява с помощта на естествен динамичен SQL?

  5. Извличане на записи от свързан списък в релационна база данни