sql >> Database >  >> RDS >> Mysql

Opgeslagen procedures met MySQL Workbench

Bij gebruik van de ingebouwde procedure-editor voegt MySQL Workbench een paar extra opdrachten toe:

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

Die commando's zijn niet strikt gerelateerd aan de syntaxis van de opgeslagen procedures, ze zijn slechts een handelsartikel - andere MySQL-clients (zoals HeidiSQL of het officiële hulpprogramma voor de opdrachtregel) zullen ze niet toevoegen. De laatste wijziging van het scheidingsteken is waarschijnlijk een reset om problemen in toekomstige uitspraken over dezelfde verbinding te voorkomen.

U moet het scheidingsteken wijzigen om de client te instrueren waar de procedurecode begint en eindigt. Het probleem is dat de hoofdtekst van de procedure normaal gesproken een verzameling SQL-instructies is, dus als u de wijziging van het scheidingsteken weglaat, zou MySQL denken dat u een reeks instructies probeert uit te voeren, waarvan de eerste deze zou zijn:

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

Met DELIMITER $$ je vertelt MySQL dat je volledige verklaring van CREATE . komt tot END . Het is gewoon syntactische suiker:DELIMITER is niet eens een SQL-sleutelwoord. HeidiSQL biedt bijvoorbeeld een GUI met een tekstvak waarin u de hoofdtekst van de procedure schrijft, dus u hebt de DELIMITER-oplossing niet nodig.




  1. Hoe de cPanel MySQL-databasewizard te gebruiken?

  2. ORA-00932:inconsistente datatypes:verwacht - kreeg CLOB

  3. Microsoft DiskSpd gebruiken om uw opslagsubsysteem te testen

  4. Xampp MySQL start niet - Poging om MySQL-service te starten...