如何在使用SQL的触发器中使用if语句

时间:2014-08-18 15:57:56

标签: sql database triggers db2

我的IBMDB2数据库中有以下表格:

  

货号(PID ....等)       CombosAndPromotions(CP_ID,CP_Price ......等)       PriceSize(尺寸,价格)       销售(PID,CP_ID,大小,数量,Sales_Price)

我想创建一个触发器来自动计算Sales_Price的值。基本上

  

1 - 如果PID为空,则该值是CP_ID *数量的价格。

     

2-如果CP_ID为空,则Sales_Price的值是购买产品的大小的价格(价格取决于不在PID上的大小)*数量。

     

3 - 如果它们都不为null,那么Sales_Price的值等于前两个求和的总和。我尝试了以下SQL代码,但它不起作用。

create trigger calc_Price
after insert on sales
for every row mode db2sql 

if CP_ID is null
update table Sales
set Price = (PriceSize.price)*Quantity
where Sales.size = PriceSize.size

if PID is null
update table Sales
set price = CombosAndPromotions.CP_price * quantity
where CombosAndPromotions.CP_ID = Sales.CP_ID

有人可以协助我如何纠正它,因为我没有使用sql的经验。 谢谢。

1 个答案:

答案 0 :(得分:1)

自从我使用db / 2以来已经很长时间了,但是这样的事情可能有用:

create trigger calc_Price
after insert on sales
referencing new as n
for every row mode db2sql 
begin atomic
    declare cpprice int;

    if n.CP_ID is null then
        update table Sales
            set Price = (n.price) * n.Quantity
        where PID = n.PID
    end if;

    if n.PID is null then
        set cpprice = (select CP_price from CombosAndPromotions where CP_ID = n.CP_ID)
        update table Sales
           set price = cpprice * n.quantity
        where PID = n.PID
    end if;
end

想法是引用新插入的行(此处为n)并使用该行中的键来更新表。 (这可能比插入前更好..?)