【发布时间】:2016-07-22 17:47:30
【问题描述】:
在 Oracle 环境中(我使用的是 SQLPLUS)。我的问题是如何更改新插入的元组的数据。 这是一个示例:我需要确保每当插入表“Orders”时,如果其属性“weight”大于100,则其另一个属性“size_level”必须为1。否则(weight
CREATE OR REPLACE TRIGGER new_ship_trigger
AFTER INSERT ON Orders
FOR EACH ROW
BEGIN ATOMIC
CALL UpdateShipSizeLevel(:new)
END;
/
我应该如何编写存储过程部分的代码?或者也许我需要一个光标? 我被要求不要向“订单”表添加约束,并且我应该使用不超过一个触发器。
【问题讨论】:
-
这是正确的 SQL,只是为了澄清......
-
1) 通常你可以做一个
BEFORE INSERT触发器,它可以用来在值到达表之前修改或添加值。 2) 此外,size_level是派生 信息,通常不应存储(如果可以避免的话)。您可能只能将其定义为视图的一部分。否则,如果您需要性能,请考虑计算列。