[英]Oracle SQL Trigger with IF Comparison
我想创建一个触发器TR_rate,在插入新行时检查其“功能”字段,并根据所包含的功能来调整速率。
功能字段可以包含多个值,我希望条件适用于每个值。 因此,如果该字段包含“ Feature1,Feature2”,则速率应提高35。
我当前的代码方法仅在具有一项功能的情况下有效。 如何重写它以适应多种功能?
CREATE OR REPLACE TRIGGER TR_rate
BEFORE INSERT
ON rates_table
FOR EACH ROW
BEGIN
IF(:NEW.features = 'Feature1') THEN
:NEW.rate := (:NEW.rate + 15);
IF(:NEW.features = 'Feature2') THEN
:NEW.rate := (:NEW.rate + 20);
IF(:NEW.features = 'Feature3') THEN
:NEW.rate := (:NEW.rate + 30);
END IF;
END IF;
END IF;
END;
/
您需要if
语句是顺序的而不是嵌套的,并且需要使用like
:
IF(:NEW.features like '%Feature1%') THEN
:NEW.rate := (:NEW.rate + 15);
END IF;
IF(:NEW.features like '%Feature2%') THEN
:NEW.rate := (:NEW.rate + 20);
END IF;
IF(:NEW.features like '%Feature3%') THEN
:NEW.rate := (:NEW.rate + 30);
END IF;
但是,我只是使用select
做到这一点:
select (new.rate +
(case when :new.features like '%Feature1%' then 15 else 0 end) +
(case when :new.features like '%Feature2%' then 20 else 0 end) +
(case when :new.features like '%Feature3%' then 30 else 0 end)
)
into :new.rate;
您可以在PL / SQL级别上执行相同的操作,但这会在一条语句中捕获逻辑。
对所有三个重复以上操作:
IF(:NEW.features like '%Feature1%') THEN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.