как вызвать StoredProcedure или функции из триггера MySQL? - PullRequest
2 голосов
/ 20 ноября 2010

Я работаю над MySQL 5.1.3 и использую PHPMyAdmin 3.1.3.1 для доступа к нему. С PHP в качестве языка сценариев на стороне сервера. Моя проблема заключается в том, можем ли мы вызвать хранимую процедуру или функцию из оператора Trigger, чтобы при вызове триггера INSERT | UPDATE | DELETE он вызывал SP для обновления некоторых других таблиц в соответствии с определенной логикой.

1 Ответ

6 голосов
/ 20 ноября 2010

Смотрите здесь Синтаксис Mysql Trigger

mysql> delimiter //  
mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account  
    -> FOR EACH ROW  
    -> BEGIN  
    ->     IF NEW.amount < 0 THEN  
    ->         SET NEW.amount = 0;  
    ->     ELSEIF NEW.amount > 100 THEN  
    ->         SET NEW.amount = 100;  
    ->     END IF;  
    -> END;//  
mysql> delimiter;  

Может быть проще определить хранимую процедуру отдельно, а затем вызвать ее из триггера с помощью простого оператора CALL. Это также полезно, если вы хотите вызвать одну и ту же процедуру из нескольких триггеров.

Существуют некоторые ограничения на то, что может появляться в инструкциях, которые триггер выполняет при активации:

Триггер не может использовать оператор CALL для вызова хранимых процедур, которые возвращают данные клиенту или используют динамический SQL. (Хранимым процедурам разрешено возвращать данные в триггер через параметры OUT или INOUT.)

Триггер не может использовать операторы, которые явно или неявно начинают или заканчивают транзакцию, такие как START TRANSACTION, COMMIT или ROLLBACK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...