MySQL数据库存储过程动态表建立(PREPARE)
這是我項目其中用到的,用作參考使用:
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)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记#Android Studio
- 下一篇: Android开发之SpannableS