MySQL
FÖRBEREDA uttalanden
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