[英]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.