Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL:Как да използвам разделители в тригери?

Част 1

Разделителите се използват за изходни обекти като съхранена процедура/функция, тригер или събитие. Всички тези обекти може да имат тяло - код в рамките на клауза BEGIN...END.

Всички изрази в MySQL скриптове трябва да завършват с разделител, по подразбиране е ';'. Но какво да направите, ако изходният обект има тяло с някои изрази, напр.:

INSERT INTO table1 VALUES(1);

CREATE PROCEDURE procedure1()
BEGIN
  SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
  PREPARE stmt2 FROM @s;
  SET @a = 6;
  SET @b = 8;
  EXECUTE stmt2 USING @a, @b;
END;

INSERT INTO table1 VALUES(2);

Колко изявления? 3 или 8? Отговорът е три, защото скриптът има два оператора INSERT и един CREATE PROCEDURE. Както виждате, CREATE PROCEDURE също има някои вътрешни изрази; трябва да кажем на MySQL клиента, че всички тези изрази (вътре в BEGIN...END) - са част от ЕДИН оператор; можем да го направим с помощта на разделители:

INSERT INTO table1 VALUES(1);

DELIMITER $$

CREATE PROCEDURE procedure1()
BEGIN
  SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
  PREPARE stmt2 FROM @s;
  SET @a = 6;
  SET @b = 8;
  EXECUTE stmt2 USING @a, @b;
END$$

DELIMITER ;

INSERT INTO table1 VALUES(2);

Имайте предвид, че когато задействането ви няма клауза BEGIN...END, разделителите може да бъдат пропуснати.

Част 2

Без разделители операторът ще бъде анализиран като -

CREATE PROCEDURE procedure1()
BEGIN
  SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';

вместо -

CREATE PROCEDURE procedure1()
BEGIN
  SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
  PREPARE stmt2 FROM @s;
  SET @a = 6;
  SET @b = 8;
  EXECUTE stmt2 USING @a, @b;
END


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Достъпът е отказан за MYSQL ГРЕШКА 1045

  2. MySQL/SQL:Актуализация с корелирана подзаявка от самата актуализирана таблица

  3. преобразуване на часова зона в друга часова зона

  4. Използване на PHP DOM за създаване на XML файлове от MySQL данни

  5. mySQL - Вмъкване в три таблици