sql >> Database teknologi >  >> RDS >> Mysql

Lagrede procedurer ved hjælp af MySQL Workbench

Når du bruger den indbyggede procedureeditor, tilføjer MySQL Workbench et par ekstra kommandoer:

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

Disse kommandoer er ikke strengt relateret til syntaksen for lagrede procedurer, de er blot en vare – andre MySQL-klienter (såsom HeidiSQL eller det officielle kommandolinjeværktøj) vil ikke tilføje dem. Den sidste afgrænsningsændring er sandsynligvis en nulstilling for at undgå problemer i fremtidige udsagn på samme forbindelse.

Du skal ændre afgrænsningen for at instruere klienten om, hvor procedurekoden starter og slutter. Problemet er, at procedureteksten normalt er en samling af SQL-sætninger, så udeladelse af afgrænsningsændringen ville få MySQL til at tro, at du forsøger at køre en række sætninger, hvoraf den første ville være denne:

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 fortæller MySQL, at din fulde erklæring går fra CREATE til END . Det er kun syntaktisk sukker:DELIMITER er ikke engang et SQL nøgleord. HeidiSQL, for eksempel, giver en GUI med en tekstboks, hvor du skriver procedureteksten, så du behøver ikke DELIMITER-løsningen.




  1. Skift sprog på systemet og fejlmeddelelser i PostgreSQL

  2. Beregn en løbende total i SQL Server

  3. Sådan opretter du forbindelse til MySQL ved hjælp af Node.js

  4. MySQLd starter ikke efter brygopgradering fra 5.6 til 5.7