Sök…


Syntax

  • PREPARE stmt_name FRA preparable_stmt
  • EXECUTE stmt_name [USING @var_name [, @var_name] ...]
  • {DEALLOKERA | DROP} PREPARE stmt_name

FÖRBEREDA, UTFÖR och DEALLOKERA FÖRBEREDELSER

PREPARE förbereder ett uttalande för körning

EXECUTE utför ett förberett uttalande

DEALLOCATE PREPARE släpper ett förberett uttalande

SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
PREPARE stmt2 FROM @s;
SET @a = 6;
SET @b = 8;
EXECUTE stmt2 USING @a, @b;

Resultat:

+------------+
| hypotenuse |
+------------+
|         10 |
+------------+

Till sist,

DEALLOCATE PREPARE stmt2;

Anmärkningar:

  • Du måste använda @variables, inte DECLAREd-variabler för FROM @s
  • En primär användning för att förbereda etc är att "konstruera" en fråga i situationer där bindning inte fungerar, till exempel att infoga tabellnamnet.

Konstruera och kör

(Detta är en begäran om ett bra exempel som visar hur man konstruerar en SELECT med CONCAT , förbered sedan + kör den. Vänligen betona användningen av @variables kontra DECLAREd-variabler - det gör en stor skillnad, och det är något som nybörjare ( inkludera mig själv) snubbla över.)

Ändra tabell med lägg till kolumn

SET v_column_definition := CONCAT(
  v_column_name
  ,' ',v_column_type
  ,' ',v_column_options 
);

SET @stmt := CONCAT('ALTER TABLE ADD COLUMN ', v_column_definition);

PREPARE stmt FROM @stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow