久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL 5.7中PREPARE、EXECUTE、DEALLOCATE語句怎么用

143次閱讀
沒有評論

共計 3708 個字符,預計需要花費 10 分鐘才能閱讀完成。

丸趣 TV 小編給大家分享一下 MySQL 5.7 中 PREPARE、EXECUTE、DEALLOCATE 語句怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

PREPARE 語句準備好一條 SQL 語句,并分配給這條 SQL 語句一個名字供之后調用。準備好的 SQL 語句通過 EXECUTE 命令執(zhí)行,通過 DEALLOCATE PREPARE 命令釋放掉。

語句的名字不區(qū)分大小寫。準備好的 SQL 語句名字可以是字符串,也可以是用戶指定的包含 SQL 文本的變量。PREPARE 中的 SQL 文本必須代表一條單獨的 SQL 語句而不能是多條 SQL 語句。在 SQL 語句中,? 字符用來作為后面執(zhí)行查詢使用的一個參數(shù)。? 不能加上引號,及時打算將它們綁定到字符變量中也不可以。

如果準備好的 SQL 語句名字已經(jīng)存在,它會在新語句被準備好前釋放掉。這意味著,如果一條新的語句包含錯誤且不能被準備好,這時會返回錯誤并且準備好的 SQL 語句將不再存在。

準備好的語句范圍是創(chuàng)建它的會話,具有下列特點:

準備好的語句在其他會話無效;

當會話結束時,不管會話時正常結束還是異常結束,這個會話中準備好的 SQL 語句將不再存在。如果自動連接功能開啟,客戶端不會被通知連接丟失。

在存儲過程或函數(shù)里面的準備好的語句,在存儲過程或函數(shù)執(zhí)行結束后,會繼續(xù)存在,可以在存儲過程或包外面繼續(xù)被執(zhí)行。

示例:
mysql SET @a=10;
Query OK, 0 rows affected (0.00 sec)

mysql PREPARE STMT FROM SELECT * FROM dept2 LIMIT ?
Query OK, 0 rows affected (0.08 sec)
Statement prepared

mysql EXECUTE STMT USING @a;
+——–+——-+
| deptno | dname |
+——–+——-+
|     10 | A     |
|     20 | B     |
|     30 | C     |
|     40 | D     |
|     50 | E     |
|     60 | F     |
|     70 | G     |
|     80 | H     |
|     90 | I     |
|    100 | J     |
+——–+——-+
10 rows in set (0.02 sec)

mysql SET @skip=1; SET @numrows=5;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql PREPARE STMT FROM SELECT * FROM dept2 LIMIT ?, ?
Query OK, 0 rows affected (0.00 sec)
Statement prepared

mysql EXECUTE STMT USING @skip, @numrows;
+——–+——-+
| deptno | dname |
+——–+——-+
|     20 | B     |
|     30 | C     |
|     40 | D     |
|     50 | E     |
|     60 | F     |
+——–+——-+
5 rows in set (0.00 sec)

mysql DEALLOCATE PREPARE STMT;
Query OK, 0 rows affected (0.00 sec)

mysql EXECUTE STMT USING @skip, @numrows;
ERROR 1243 (HY000): Unknown prepared statement handler (STMT) given to EXECUTE

mysql PREPARE STMT FROM SELECT * FROM dept2 LIMIT ?, ?
Query OK, 0 rows affected (0.00 sec)
Statement prepared

mysql EXECUTE STMT USING @skip, @numrows;
+——–+——-+
| deptno | dname |
+——–+——-+
|     20 | B     |
|     30 | C     |
|     40 | D     |
|     50 | E     |
|     60 | F     |
+——–+——-+
5 rows in set (0.00 sec)

示例存儲過程
delimiter $$
create procedure registerSQLReference(IN the_table_name VARCHAR(80), IN the_sql_script_version VARCHAR(80), IN the_sql_script_name VARCHAR(80),
IN the_install_version  VARCHAR(80), IN the_execution_duration VARCHAR(80), IN the_sql_script_description VARCHAR(200))
BEGIN
declare column_exist INT DEFAULT 0;
declare the_query VARCHAR(500);

  select [INFO]  Check if the column C_CHANGE_DESCRIPTION exists in the table @VERSION_LEVEL_TABLE_NAME
  set column_exist = is_ChangeDescColumnExist (@VERSION_LEVEL_TABLE_NAME

  IF column_exist = 0
  THEN

  select [INFO]  VERSION LEVEL TABLE does not contain C_CHANGE_DESCRIPTION column.
  set @v_the_table_name=the_table_name;
  select concat(INSERT INTO , @v_the_table_name, VALUES (?, ?, ?, ?, ?) ) into the_query;
  SET @stmt=the_query;
  PREPARE STMT FROM @stmt;
  select concat([INFO]  the_query= , the_query );
  set @v_the_sql_script_version=the_sql_script_version;
  set @v_the_sql_script_name=the_sql_script_name;
  set @v_date=now();
  set @v_the_install_version=the_install_version;
  set @v_the_execution_duration=the_execution_duration;
  EXECUTE STMT using @v_the_sql_script_version , @v_the_sql_script_name, @v_date, @v_the_install_version, @v_the_execution_duration;

  ELSE
  select [INFO]  VERSION LEVEL TABLE contains C_CHANGE_DESCRIPTION column.

  select concat(INSERT INTO , the_table_name, VALUES (?, ?, ?, ?, ?, ?) ) into the_query;
  SET @stmt=the_query;
  PREPARE STMT FROM @stmt;
  select concat([INFO]  the_query= , the_query );
  set @v_the_sql_script_version=the_sql_script_version;
  set @v_the_sql_script_name=the_sql_script_name;
  set @v_date=now();
  set @v_the_install_version=the_install_version;
  set @v_the_execution_duration=the_execution_duration;
  set @v_the_sql_script_description=the_sql_script_description;
  select concat([INFO]  the_query= , the_query);
  EXECUTE the_query using @v_the_sql_script_version , @v_the_sql_script_name, @v_date, @v_the_install_version, @v_the_execution_duration, @v_the_sql_script_description;

  END IF;
  DEALLOCATE PREPARE STMT;
END$$
delimiter ;

以上是“MySQL 5.7 中 PREPARE、EXECUTE、DEALLOCATE 語句怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業(yè)資訊頻道!

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-07-27發(fā)表,共計3708字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網(wǎng)絡搜集發(fā)布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 轮台县| 会理县| 张北县| 龙南县| 轮台县| 石柱| 平凉市| 府谷县| 独山县| 中山市| 甘洛县| 鹿邑县| 双鸭山市| 绥化市| 固原市| 西峡县| 铁岭县| 宁强县| 莒南县| 阿克| 田阳县| 吉木乃县| 高青县| 长宁县| 察哈| 梅河口市| 会同县| 九寨沟县| 白水县| 望都县| 阳高县| 衡水市| 五原县| 新巴尔虎左旗| 古交市| 边坝县| 武宣县| 大丰市| 金坛市| 新乐市| 南木林县|