Mysql / база данных adventureworks / триггерный вопрос - PullRequest
0 голосов
/ 18 ноября 2018

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

Из-за складских ограничений, инвентарь более 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

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

1 Ответ

0 голосов
/ 18 ноября 2018

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

...