mysql/adventureworks数据库/触发器问题

hsgswve4  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(376)

下午好,我在课堂上理解这个问题时遇到了一些困难。这个作业的目的是通过触发器添加数据输入的参数,触发器在满足特定条件时启动。
由于仓储的限制,超过800个单位的存货需要送到外部储存地点,并单独跟踪。您已被要求监视更新何时将超过此边界,以便在生产会议上处理它。为production.productinventory表编写一个名为“tgrexcessinentory”的触发器,以确保数量永远不能超过800个单位。这是第一步。修改在步骤1中创建的触发器,使其仅在数量列更新时执行其检查代码。我成功地创建了触发器,但在理解如何修改它时遇到了问题?这就是我目前所拥有的。我在这里看到过一些类似于这个问题的帖子,但是我没有看到任何修改过的帖子。我觉得我少了一些小东西。根据我的理解,我需要写一个alter语句吗?

CREATE TRIGGER tgrExcessInventory
on Production.ProductInventory
FOR UPDATE
AS
IF EXISTS
    (SELECT 'True'
    FROM Inserted i
    JOIN Deleted d
            ON i.productID = d.ProductID
            AND i.locationID = d.LocationID
            WHERE (d.quantity + i.quantity) >= 800 OR 
            i.quantity >=800

    )Begin
    RAISERROR('Cant increase supply where units would be over 800 
    units',16,1)
            ROLLBACK TRAN
    END

然后我做了alter函数

ALTER TRIGGER [Production].[tgrExcessInventory]
      on [Production].[ProductInventory]
      FOR UPDATE
      AS
      IF EXISTS
      (SELECT 'True'
      FROM Inserted I
       JOIN Deleted D
            ON i.Quantity = d.quantity
            AND i.Quantity = d.Quantity
            WHERE (d.quantity + i.quantity) >= 800 OR 
            i.quantity >=800

    )Begin
    RAISERROR('Cant increase supply where units would be over 800 units',16,1)
            ROLLBACK TRAN
    END

好像有用?我相信我做得对任何提示都会很感激谢谢你的时间

sxpgvts3

sxpgvts31#

如果你在这里读到:https://dba.stackexchange.com/questions/193219/alter-procedure-in-mysql
关于 ALTER PROCEDURE 此语句可用于更改存储过程的特性。一个文件中可以指定多个更改 ALTER PROCEDURE 声明。但是,不能使用此语句更改存储过程的参数或主体;要进行此类更改,必须使用删除并重新创建过程 DROP PROCEDURE 以及 CREATE PROCEDURE .
如果过程是一个小的更改,那么可以使用alter语句轻松地更改它。如果你想做出更大的改变,你应该使用 SHOW CREATE PROCEDURE tgrExcessInventory 然后进行更改,删除现有过程 DROP PROCEDURE IF EXIST tgrExcessInventory 运行 CREATE PROCEDURE 您的更改声明

相关问题