在sql Developer中我创建了一个表
Bill (id,nr,cost,days,total -all integers)
我需要创建一个约束(或触发器 - 最好),就像
一样IF nr > 10 then total = total -5 (total = nr * cost * days ).
CREATE OR REPLACE TRIGGER discount
AFTER INSERT OR UPDATE ON Bill
UPDATE Bill
set total = nr * cost * nr - 5;
WHEN (nr_slide > 10 )
我可以使用更新内部触发器吗?
答案 0 :(得分:1)
我也不说,你的桌子不应该有Total
列。相反,您应该有一个从Bill
中选择并计算Total
的视图。像
SELECT
id,
nr,
days,
CASE WHEN nr > 10 THEN
(nr * cost * days) - 5
ELSE
(nr * cost * days)
END AS 'Total'
FROM view_Bill
答案 1 :(得分:0)
约束只能防止将错误的值放到表中。如果使用约束,则需要计算total的正确值并插入表中,否则不会插入任何行。这意味着你需要一个触发器。
CREATE OR REPLACE TRIGGER discount
AFTER INSERT OR UPDATE ON Bill
for each row -- I added it here
begin
IF :new.nr > 10 then
:new.total = :new.nr * :new.cost * :new.days - 5;
END IF;
end;
如果这是一个教育项目 - 没问题(当然,这是一个问题 - 这是教育的一个非常糟糕的例子)。在现实生活的应用中使用Ash Burlaczenko的建议。