日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL数据库存储过程动态表建立(PREPARE)

發布時間:2025/5/22 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL数据库存储过程动态表建立(PREPARE) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • PREPARE?statement_name?FROM?sql_text?/*定義*/???
  • EXECUTE?statement_name?[USING?variable?[,variable...]]?/*運行預處理語句*/???
  • DEALLOCATE?PREPARE?statement_name?/*刪除定義*/ ??

  • 這是我項目其中用到的,用作參考使用:

    DELIMITER $$ DROP PROCEDURE IF EXISTS `gpsdata`.`sp_test`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_test`(gpstime_ varchar(128),gpsname_ varchar(128),gpsinfo_ varchar(256) ) BEGIN DECLARE tbname varchar(50) DEFAULT '0'; DECLARE v_sql varchar(1024) DEFAULT '0';SET v_sql=CONCAT('select * from ', tbname ,' where gpsname = ',gpsname_,' order by gpstime desc limit 1');SET @lastdata = v_sql; PREPARE lastdata FROM @lastdata; EXECUTE lastdata; DEALLOCATE PREPARE lastdata; select v_sql;END$$DELIMITER ;


    使用 PREPARE 的幾個注意點:
    A: PREPARE stmt_name FROM preparable_stmt;


    ?提前定義一個語句,并將它賦給 stmt_name ,stmt_name 是不區分大寫和小寫的。


    B: 即使 preparable_stmt 語句中的 ? 所代表的是一個字符串,你也不須要將 ? 用引號包括起來。


    C: 假設新的 PREPARE 語句使用了一個已存在的 stmt_name ,那么原有的將被馬上釋放!


    ?即使這個新的 PREPARE 語句由于錯誤而不能被正確運行。


    D: PREPARE stmt_name 的作用域是當前client連接會話可見。


    E: 要釋放一個提前定義語句的資源,能夠使用 DEALLOCATE PREPARE 句法。




    F: EXECUTE stmt_name 句法中,假設 stmt_name 不存在。將會引發一個錯誤。

    ?


    G: 假設在終止client連接會話時。沒有顯式地調用 DEALLOCATE PREPARE 句法釋放資源,server端會自己動釋放它。


    H:在提前定義語句中。CREATE TABLE, DELETE, DO, INSERT, REPLACE, SELECT, SET, UPDATE, 和大部分的 SHOW 句法被支持。




    I:PREPARE 語句不能夠用于存儲過程(5.0以上能夠使用),自己定義函數!

    但從 MySQL 5.0.13 開始,它能夠被用于存儲過程,仍不支持在函數中使用!

    總結

    以上是生活随笔為你收集整理的MySQL数据库存储过程动态表建立(PREPARE)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。