将 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
条件来限制结果集
我在将以下命令转换为 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
条件来限制结果集