存储过程中的 prepare语句(存储过程中动态增减表字段)

干嘛的

如果需要在存储过程中创建一张临时表,然后在动态增减临时表的字段,那就可以用mysql的prepare预编译语句了。

有什么用

  • 他还可以在存储过程中动态的拼接表名,字段名,来达到动态查询的效果
  • sql语句中还可以用?来代表参数,这样可以有效的防止sql注入

语法

PREPARE stmt from '你的sql语句';  
EXECUTE stmt (如果sql有参数的话, USING xxx,xxx); // 这里USING的只能是会话变量
DEALLOCATE PREPARE stmt; 

例子

delimiter //
create procedure myTest()
begin
set @_sql = 'select ? + ?';
set @a = 5;
set @b = 6;
PREPARE stmt from @_sql; // 预定义sql  stmt是可变的
EXECUTE stmt USING @a,@b;// 传入两个会话变量来填充sql中的 ?
DEALLOCATE PREPARE stmt; // 释放连接
end //
delimiter //
create procedure myTest(in columnName varchar(32)) // 传入一个字符串
BEGIN
drop table if exists tmpTable; // 如果临时表存在先删除掉
set @_sql = concat('create temporary table if not exists tmpTable( ', columnName, ' varchar(32), id int(11), _name varchar(32));'); // 创建临时表的语法,我们把传入的参数拼接进来
PREPARE stmt from @_sql;    
EXECUTE stmt;
DEALLOCATE PREPARE stmt;  // 执行
desc tmpTable;
end //

你可能感兴趣的:(存储过程中的 prepare语句(存储过程中动态增减表字段))