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

Får to problemer, mens du bruger lagret procedure i MySQL

Det er begrænsningen.

Nu, løsningen:tilføj en indlejret BEGIN ... END blokere.

DELIMITER $$
CREATE PROCEDURE ...
BEGIN
  DECLARE ... INT ... -- variable
  CREATE TEMPORARY TABLE... -- following the declarations, no more declarations allowed, unless...
  BEGIN -- resets the scope, changes the rules, allows more declarations
    DECLARE ... INT ... -- variables
    DECLARE ... CURSOR ...
    DECLARE CONTINUE HANDLER ...
    OPEN ...
    ...
  END;
END $$

Alle variabler i den ydre blok er stadig i omfanget i den indre blok, medmindre en anden variabel i den indre blok har et modstridende navn.

En HANDLER i den ydre blok er der også mulighed for signaler i den indre blok, medmindre en modstridende handler er erklæret der, i hvilket tilfælde den indre handler vil fange undtagelsen, og det ydre håndtag vil fange alt, hvad der kastes af den indre handler, inklusive en RESIGNAL .

Flere redeniveauer er tilladt. Størrelsen på thread_stack kan være en faktor, men dokumentationen er uklar. Jeg har kørt 262.144 byte trådstakke siden før det blev standard, og jeg har aldrig stødt på en grænse.



  1. Inkrementel datamaskering og kortlægning:Registrering af ændringer og opdatering...

  2. Skift MySQL-tabel for at tilføje kommentarer til kolonner

  3. MySQL:Ugyldige GIS-data leveret til funktion st_geometryfromtext

  4. Udfør regex (erstat) i en SQL-forespørgsel