解码函数中的多个条件插入表中的值
问题描述:
我有下面的触发器,我想在FIELD_TRACKING
表中插入值。 我有FIELD_TRACKING_COMMENTS
字段,我想根据条件插入值。条件是如果(Last_Updated_By = 115 and new.KPI_ACTIVE_MANUAL,N)
那么评论应该是This KPI has been deactivated by System -> Active Alerts
。我已经在解码声明decode(:new.KPI_ACTIVE_MANUAL,'N','This KPI has been deactivated by System -> Active Alerts',''))
中为FIELD_TRACKING_COMMENTS
字段添加了条件,并且它的工作正常。但我想添加额外的条件'Last_Updated_By = 115'
,我不知道如何将它添加到解码语句中。解码函数中的多个条件插入表中的值
create or replace TRIGGER RATOR_MONITORING_CONFIGURATION."TRG_TRK_KPI_DEFINITION" AFTER UPDATE ON RATOR_MONITORING_CONFIGURATION.KPI_DEFINITION
FOR EACH ROW
BEGIN
----New change
--IF NOT :old.KPI_ACTIVE_MANUAL=:new.KPI_ACTIVE_MANUAL THEN
IF NOT NVL(:old.KPI_ACTIVE_MANUAL,0)=NVL(:new.KPI_ACTIVE_MANUAL,0) THEN
INSERT INTO RATOR_MONITORING_CONFIGURATION.FIELD_TRACKING (TABLE_ID, FIELD_NAME,FIELD_OLD_VALUE,FIELD_NEW_VALUE,USER_ID, FIELD_TRACKING_COMMENTS)
VALUES (:new.KPI_DEF_ID,'Active(Manual)',NVL(to_char(:old.KPI_ACTIVE_MANUAL),'Y'),NVL(to_char(:new.KPI_ACTIVE_MANUAL),'Y'),:new.LAST_UPDATED_BY,decode(:new.KPI_ACTIVE_MANUAL,'N','This KPI has been deactivated by System -> Active Alerts',''));
END IF;
END;
答
你可以使用一个嵌套decode
:
decode(:new.KPI_ACTIVE_MANUAL,'N',
decode(:new.Last_Updated_By, 115,
'This KPI has been deactivated by System -> Active Alerts',
''),
'')
但它的简单使用case
表达式来代替:
INSERT INTO RATOR_MONITORING_CONFIGURATION.FIELD_TRACKING (TABLE_ID,
FIELD_NAME,FIELD_OLD_VALUE,FIELD_NEW_VALUE,USER_ID, FIELD_TRACKING_COMMENTS)
VALUES (:new.KPI_DEF_ID, 'Active(Manual)',
NVL(to_char(:old.KPI_ACTIVE_MANUAL),'Y'),
NVL(to_char(:new.KPI_ACTIVE_MANUAL),'Y'),
:new.LAST_UPDATED_BY,
case when :new.KPI_ACTIVE_MANUAL = 'N' AND :new.Last_Updated_By = 115
then 'This KPI has been deactivated by System -> Active Alerts'
else '' end
);
虽然persionally我会使用null
代替''
,和您可以省略else null
子句,因为这是默认设置。看起来奇怪的是,您的外部IF
条件将NVL的旗标值设置为0
,因为它似乎是Y
/N
的字符列。
好吧,我用你的答案替换这个插入和它的说法列不允许在Last_Updated_By的地方在case语句 – Andrew
@rahul - 是的,我复制了你放的东西,但没有足够的思考。你想要那个专栏的旧价值或新价值吗?我更新了使用':new'的答案,因为这似乎是您检查内容的明显选择,但如果您愿意,可以使用':old'。 –
感谢亚历克斯现在的工作:) – Andrew