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

Съхранени процедури, използващи MySQL Workbench

Когато използвате вградения редактор на процедури, MySQL Workbench добавя няколко допълнителни команди:

USE `test`; // <----------
DROP procedure IF EXISTS `p2`;  // <----------

DELIMITER $$
USE `test`$$ // <----------
CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';
END $$

DELIMITER ; // <----------

Тези команди не са строго свързани със синтаксиса на съхранените процедури, те са просто стока — други MySQL клиенти (като HeidiSQL или официалната помощна програма за команден ред) няма да ги добавят. Последната промяна на разделителя вероятно е нулиране, за да се избегнат проблеми в бъдещи изрази за същата връзка.

Трябва да промените разделителя, за да инструктирате клиента къде започва и завършва кодът на процедурата. Проблемът е, че тялото на процедурата обикновено е колекция от SQL изрази, така че пропускането на промяната на разделителя би накарало MySQL да мисли, че се опитвате да изпълните серия от оператори, първият от които би бил следният:

CREATE PROCEDURE test.`p2` ()
LANGUAGE SQL
DETERMINISTIC
COMMENT 'Adds "nson" to first and last names in the record.'
BEGIN
SELECT 'Hello World';

С DELIMITER $$ казвате на MySQL, че пълният ви израз идва от CREATE до END . Това е просто синтактична захар:DELIMITER дори не е SQL ключова дума. HeidiSQL, например, предоставя графичен интерфейс с текстово поле, в което пишете тялото на процедурата, като по този начин нямате нужда от решението DELIMITER.




  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

  2. предаване на LIMIT като параметри на MySQL sproc

  3. Актуализирайте общата сума въз основа на предишния ред на баланса

  4. Вземете пълен низ за заявка на MySQL при вмъкване или актуализиране

  5. Използвайте параметър във функцията, предадена на google.setOnLoadCallback();