将 mysql 命令转换为 oracle 命令时出现问题 - 触发器

Problem with translating mysql command to oracle command - triggers

我在将以下命令转换为 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

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

你可以这样转换

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;
/

Oracle 中:

  • OR REPLACE 子句在需要编辑触发器时使用
  • 局部变量可能被定义为那些具有 在 table
  • 每个语句都以分号结尾
  • 添加了 NO_DATA_FOUND 的异常处理,因为最多假定一个 inserted table 的当前查询中的第 returns 行没有 一个WHERE条件来限制结果集