sql >> Databasteknik >  >> RDS >> Mysql

Lagrade procedurer med MySQL Workbench

När du använder den inbyggda procedurredigeraren lägger MySQL Workbench till några extra kommandon:

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

Dessa kommandon är inte strikt relaterade till syntaxen för lagrade procedurer, de är bara en handelsvara – andra MySQL-klienter (som HeidiSQL eller det officiella kommandoradsverktyget) kommer inte att lägga till dem. Den sista avgränsningsändringen är förmodligen en återställning för att undvika problem i framtida satser på samma anslutning.

Du måste ändra avgränsaren för att instruera klienten om var procedurkoden börjar och slutar. Problemet är att procedurkroppen normalt är en samling SQL-satser, så att utelämna avgränsningsändringen skulle få MySQL att tro att du försöker köra en serie satser, varav den första skulle vara denna:

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

Med DELIMITER $$ du talar om för MySQL att ditt fullständiga uttalande kommer från CREATE till END . Det är bara syntaktisk socker:DELIMITER är inte ens ett SQL-nyckelord. HeidiSQL, till exempel, tillhandahåller ett grafiskt användargränssnitt med en textruta där du skriver procedurens brödtext, så du behöver inte en lösning på DELIMITER.




  1. SSIS-handledning för nybörjare:Varför, vad och hur?

  2. Förstå QUOTED_IDENTIFIER

  3. Hur exekverar jag en PHP-fråga på valt alternativ med AJAX?

  4. Ruby on Rails:Finns det något sätt att hämta föremål från databasen och få dem returnerade i en angiven ordning?