Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL:Jak używać ograniczników w wyzwalaczach?

Część 1

Ograniczniki są używane dla obiektów źródłowych, takich jak procedura składowana/funkcja, wyzwalacz lub zdarzenie. Wszystkie te obiekty mogą mieć treść - kod w klauzuli BEGIN...END.

Wszystkie instrukcje w skryptach MySQL powinny być zakończone ogranicznikiem, domyślnie jest to ';'. Ale co zrobić, jeśli obiekt źródłowy ma ciało z pewnymi instrukcjami, np.:

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

Ile oświadczeń? 3 czy 8? Odpowiedź to trzy, ponieważ skrypt zawiera dwie instrukcje INSERT i jedną instrukcję CREATE PROCEDURE. Jak widać, CREATE PROCEDURE zawiera również pewne wewnętrzne instrukcje; powinniśmy powiedzieć klientowi MySQL, że wszystkie te instrukcje (wewnątrz BEGIN...END) - są częścią JEDNEJ instrukcji; możemy to zrobić za pomocą ograniczników:

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

Zauważ, że jeśli twój wyzwalacz nie ma klauzuli BEGIN...END, ograniczniki mogą zostać pominięte.

Część 2

Wyrażenie bez ograniczników zostanie przeanalizowane jako -

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

zamiast -

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. Drzewo MySQL uporządkowane według rodzica i dziecka

  2. Zamiennik dla PEAR:MDB2 na PHP 5.3

  3. Silnik przechowywania Mysql dla tabeli dziennika

  4. Jak pobrać pierwszy i ostatni rekord rekordu zgrupowanego w zapytaniu MySQL za pomocą funkcji agregujących?

  5. Przenoszenie kolumn tekstowych szerokości/długości geograficznej do kolumny typu „punkt”