MySQL ~ Prepare, Execute, Deallocate












Prepare, Execute, Deallocate是一個使用變數來執行的一個功能,主要目的是 :

(1)在尚未寫入正式程式時做測試使用。
(2)當暫時需要做些重複動作時使用。

Prepare ~ 準備程序
Execute  ~ 執行程序
Deallocate ~ 解除程序

範例 :

mysql> PREPARE stmt1 FROM 'SELECT productCode, productName FROM products WHERE productCode = ?';
mysql> SET @pc = 'S10_1678';
mysql> EXECUTE stmt1 USING @pc;
mysql> DEALLOCATE PREPARE stmt1;

範例 :

mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
mysql> SET @a = 3;
mysql> SET @b = 4;
mysql> EXECUTE stmt1 USING @a, @b;
mysql> DEALLOCATE PREPARE stmt1;

上述動作就是在做 ~ a的平方加上b的平方,然後開根號。
POW(?,2) 指的就是把變數帶入問號的位置,然後平方。
SQRT是指開根號。

範例 :

mysql> USE test;
mysql> CREATE TABLE t1 (a INT NOT NULL);
mysql> INSERT INTO t1 VALUES (4), (8), (11), (32), (80);
mysql> SET @table = 't1';
mysql> SET @s = CONCAT('SELECT * FROM ', @table);
mysql> PREPARE stmt3 FROM @s;
mysql> EXECUTE stmt3;
mysql>DEALLOCATE PREPARE stmt3;

但在不同類型資料庫,會有些微不同,例如~

MySQL使用如下表示
WHERE col = ?
VALUES(?, ?, ?)

PostgreSQL使用如下表示
WHERE col = $1
VALUES($1, $2, $3)

Oracle使用如下表示
WHERE col = :col
VALUES(:val1, :val2, :val3)

更多參考資料
https://dev.mysql.com/doc/refman/8.0/en/sql-syntax-prepared-statements.html
https://segmentfault.com/a/1190000010756802
http://www.codedata.com.tw/database/mysql-tutorial-12-prepared-statement/


張貼留言

0 留言