Как создать триггер, выполнив хранимую процедуру в mysql. Если это невозможно, объясните причины. Есть ли способ динамически создавать триггеры, не создавая их каждый раз?
mysql создает триггер внутри хранимой процедуры
Ответы (1)
Если это невозможно, объясните причины.
Как правило, операторы, не разрешенные в подготовленных инструкциях SQL, также не разрешены в хранимых программах. Список операторов, поддерживаемых как подготовленные операторы, см. в Разделе 13.5, «Подготовленные операторы». Исключениями являются SIGNAL, RESIGNAL и GET DIAGNOSTICS, которые недопустимы в качестве подготовленных инструкций, но разрешены в хранимых программах.
Предоставляется полный список разрешенных операторов. В этом списке нет оператора CREATE TRIGGER.
Следовательно, триггер не может быть создан в хранимой процедуре.
Но вы можете создать триггер и повлиять на его выполнение. Например, вы можете создать какую-то служебную таблицу в базе данных, и проверять хранящиеся в ней значения в коде триггера - использовать их как параметры или выполнять/пропускать различные блоки кода.
Это также соответствует принципу "клиентский код не должен выполнять операции DDL".
Вы пытались создать его внутри
Events
? Например, выполняяTrigger
внутриEvent
вместоStored Procedure
, потому что вEvents
вы можете запланировать, когда вы хотите, чтобы он был выполнен.Возможно, вы могли бы объяснить проблему, которую вы пытаетесь решить с помощью этого. Почти наверняка есть другой и, возможно, лучший способ
У меня есть 50 таблиц в моей базе данных. Мне нужно создать хранимую процедуру, чтобы создать таблицу аудита для каждой таблицы, вызвав хранимую процедуру. А также необходимо создавать триггеры при создании таблицы аудита. Я пытаюсь добавить часть создания триггера внутри sp, но выдается ошибка.