2015-09-22 137 views
0

我正在寫下面的觸發器,我在嘗試插入此字段的值FIELD_OLD_VALUE,FIELD_NEW_VALUE時遇到錯誤。我必須基於Select查詢插入這個字段的值,但我得到的錯誤爲SQL Statement Ignored ORA-000936 missing expression in Oracle trigger。我不想在字段FIELD_OLD_VALUE,FIELD_NEW_VALUE中使用變量,因爲我在這個問題中只寫入了ENV_ID字段的插入語句,並且我在此觸發器中添加了許多其他字段。所以它很難對每個領域進行變化和維護。SQL語句忽略Oracle中的缺少表達式觸發器

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; 

回答

2

如果您使用子查詢作爲參數,你需要包裝他們額外的括號:

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

由於其工作 – Andrew