База данных Mysql/adventureworks/триггерный вопрос

Добрый день, у меня возникли проблемы с тем, чтобы понять этот вопрос в классе. Целью этого задания является добавление параметров ввода данных с помощью триггеров, которые запускаются при выполнении определенных условий.

Из-за ограничений складского хранения запасы более 800 единиц необходимо отправлять на внешнее хранилище и отслеживать отдельно. Вас попросили отслеживать, когда обновление выходит за эти границы, чтобы его можно было обсудить на рабочих собраниях. Напишите триггер под названием «tgrExcessInventory» для таблицы Production.ProductInventory, чтобы гарантировать, что количество никогда не превысит 800 единиц. Это первый шаг. Измените триггер, созданный на шаге 1, чтобы он выполнял его проверочный код, только если столбец Количество обновлен. Я успешно создал триггер, но не могу понять, как его изменить? Это то, что у меня есть до сих пор. Я видел здесь несколько других сообщений, похожих на этот вопрос, но я не видел ни одного с внесенными в него изменениями. Я чувствую, что это что-то маленькое, что мне не хватает. Насколько я понимаю, мне нужно написать заявление об изменении?

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

Кажется, работает? Я считаю, что сделал это правильно, любые советы будут оценены, спасибо за ваше время


person Doblin    schedule 18.11.2018    source источник
comment
Измените триггер, созданный на шаге 1. Что за шаг 1? Какой был окончательный код триггера на шаге 1? Пожалуйста, добавьте все эти детали к вопросу.   -  person Madhur Bhaiya    schedule 18.11.2018


Ответы (1)


Если вы читаете здесь: 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 с вашими изменениями.

person JoSSte    schedule 18.11.2018