如果超出现有数量,则触发以阻止订单更新
Posted
技术标签:
【中文标题】如果超出现有数量,则触发以阻止订单更新【英文标题】:Trigger to prevent an Order update if the exceeds Quantity On Hand 【发布时间】:2018-09-26 01:20:34 【问题描述】:需要在 Oracle 中创建一个触发器,如果数量超过 Items 表 Quantity on Hand 中的现有数量,将阻止 Order 条目进入 ItemsOrder 表。
这是我目前所拥有的:
create or replace
TRIGGER check_qty
AFTER UPDATE on OrderItems
FOR EACH ROW
BEGIN
IF(SELECT
OrderItems.quantity, Items.quantityOnHand FROM Items
INNER JOIN OrderItems On Items.itemID = OrderItems.itemID
WHERE Items.quantityOnHand < OrderItems.quantity);
raise_application_error(-20999,'The quantity amount is greater than the unite available');
ELSE
dbms_output.put_line('Success');
END IF;
END
得到以下错误:
错误(2,6):PLS-00103:在预期以下情况之一时遇到符号“SELECT”:(-+ case mod new not null continue avg count current exists max min prior sql stddev sum variance execute forall merge时间 时间戳 间隔 日期 管道
错误(4,13):PLS-00103:在预期以下之一时遇到符号“JOIN”:, ;对于有相交负序的组开始并集,其中连接
【问题讨论】:
【参考方案1】:我会这样想:
create or replace trigger check_qty before update on OrderItems
for each row as
v_quantity number;
BEGIN
select i.quantityOnHand into v_quantity
from items i
where i.itemId = :new.itemId;
if (v_quantity < :new.quantity) then
raise_application_error(-20999, 'The quantity amount is greater than the unite available');
end if;
end;
【讨论】:
以上是关于如果超出现有数量,则触发以阻止订单更新的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 触发器检查一个表中的课程持续时间,如果课程是特定日期,则阻止更新
MySQL触发器 trigger之after与before区分