首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

mysql prepare 存储过程运用

2013-07-08 
mysql prepare 存储过程使用CREATE PROCEDURE `p1`(IN id INT UNSIGNED,IN name VARCHAR(11))BEGIN lable_

mysql prepare 存储过程使用
CREATE PROCEDURE `p1`(IN id INT UNSIGNED,IN name VARCHAR(11))BEGIN lable_exit:BEGINSET @SqlCmd = 'SELECT * FROM tA ';IF id IS NOT NULL THENSET @SqlCmd = CONCAT(@SqlCmd , 'WHERE id=?');PREPARE stmt FROM @SqlCmd;SET @a = id;EXECUTE stmt USING @a;LEAVE lable_exit;END IF;IF name IS NOT NULL THENSET @SqlCmd = CONCAT(@SqlCmd , 'WHERE name LIKE ?');PREPARE stmt FROM @SqlCmd;SET @a = CONCAT(name, '%');EXECUTE stmt USING @a;LEAVE lable_exit;END IF;END lable_exit;END;CALL `p1`(1,NULL);CALL `p1`(NULL,'QQ');DROP PROCEDURE `p1`;

?

了解了PREPARE的用法,再用变量做表名就很容易了。不过在实际操作过程中还发现其他一些问题,比如变量定义,declare变量和set @var=value变量的用法以及参数传入的变量。

测试后发现,set @var=value这样定义的变量直接写在字符串中就会被当作变量转换,declare的变量和参数传入的变量则必须用CONCAT来连接。具体的原理没有研究。

EXECUTE stmt USING @a;这样的语句USING后面的变量也只能用set @var=value这种,declare和参数传入的变量不行。

热点排行