簡體   English   中英

具有IF比較的Oracle SQL觸發器

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM