代码之家  ›  专栏  ›  技术社区  ›  Andrew

SQL语句忽略了Oracle触发器中缺少的表达式

  •  0
  • Andrew  · 技术社区  · 10 年前

    我正在编写下面的触发器,在尝试插入此字段的值时,在那里我得到了错误 FIELD_OLD_VALUE,FIELD_NEW_VALUE 。我必须根据Select查询插入此字段的值,但我得到的错误为 SQL Statement Ignored ORA-000936 missing expression in Oracle trigger 。我不想在字段中使用变量 字段旧值、字段新值 因为我只为 ENV_ID 字段,我还有很多其他字段要添加到这个触发器中。因此,很难对每个领域的变量进行标记和维护。

    create or replace TRIGGER RATOR_MONITORING_CONFIGURATION."TRG_TRK_KPI_DEFINITION" AFTER UPDATE ON RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION
      FOR EACH ROW
    
    BEGIN
      --NEU
      IF NOT  :old.ENV_ID=:new.ENV_ID THEN
        INSERT INTO RATOR_MONITORING_CONFIGURATION.FIELD_TRACKING  (FIELD_TRACKING_ID,TABLE_NAME,TABLE_ID, FIELD_NAME,FIELD_OLD_VALUE,FIELD_NEW_VALUE,USER_ID, TIMESTAMP)
        VALUES (FIELD_TRACKING_SEQ.NEXTVAL,'KPI_DEFINITION',:new.KPI_DEF_ID,'Environment',to_char(Select NAME FROM ENVIRONMENT WHERE ENV_ID =:old.ENV_ID),to_char(Select NAME FROM ENVIRONMENT WHERE ENV_ID =:new.ENV_ID),:new.LAST_UPDATED_BY,:new.LAST_UPDATED_DATE );
      END IF;
    END;
    
    1 回复  |  直到 10 年前
        1
  •  2
  •   Husqvik    10 年前

    如果将子查询用作参数,则需要将它们包装在额外的括号中:

    to_char((Select NAME FROM ENVIRONMENT WHERE ENV_ID =:old.ENV_ID))