1

我无法将以下命令转换为 oracle 命令。如果你能帮忙,我会很高兴的!

Create Trigger sales_stock_reduction
On SalesMovements
After insert
as
Declare @ProductId int
Declare @Piece int
Select @ProductId=ProductId, @Piece=Piece from inserted
Update Uruns set stock=stock - @Piece  where ProductId=@ProductId

在这段代码中,当进行销售时,产品表中的库存数量通过销售移动表减少。我无法在 oracle 中编写此代码。想知道如何在 Oracle 中编写

4

1 回答 1

1

你可以像这样转换

CREATE OR REPLACE TRIGGER sales_stock_reduction
AFTER INSERT ON SalesMovements
FOR EACH ROW
DECLARE
  v_ProductId inserted.ProductId%type;
  v_Piece     inserted.Piece%type;
BEGIN
  BEGIN
    SELECT ProductId, Piece
      INTO v_ProductId, v_Piece
      FROM inserted;
   EXCEPTION WHEN NO_DATA_FOUND THEN NULL;   
  END;
  
  UPDATE Uruns
     SET stock=stock - v_Piece  
   WHERE ProductId=v_ProductId;
     
END;
/

甲骨文中:

  • OR REPLACE每当需要编辑触发器时使用子句
  • 局部变量可能被定义为那些在表中的数据类型
  • 每个单独的语句都以分号结尾
  • NO_DATA_FOUND由于假定从当前查询中最多返回一行,因此添加了异常处理,该inserted表没有WHERE限制结果集的条件
于 2020-12-20T19:28:48.873 回答