1、说明
在MySQL 存储过程中,时常要动态拼接并执行 sql ,并将执行的sql结果作为条件等。
最近在做 SQL Server 转 MySQL 数据库时,调整 SQL Server 数据库存储过程时,发现了 exec sp_executesql 函数 ,该文也可以作为 MySQL 替换 SQL Server 中 exec sp_executesql 函数的参考示例。
附上一篇讲 sp_executesql 函数不错的博文:《 sp_executesql 介绍和使用》.
2、示例
条件表数据 :
示例脚本 :
delimiter //
CREATE PROCEDURE test_pro()
BEGIN
DECLARE creatSql VARCHAR(2000);
DECLARE cr VARCHAR(2000);
# 这里将 sql 查询结果放在会话变量 @sName 中,如需要获取则必须放在会话变量中。
set creatSql = 'SELECT stu_name into @sName from t_users where id = 1;';
set @dynamicSq = creatSql;
# 预编译动态sql, 该地方必须使用 from @dynamicSq, 如直接使用 from creatSql 报错。
PREPARE sqa from @dynamicSq;
# 执行动态 sql
EXECUTE sqa ;
# 删除预编译的 sql
DEALLOCATE PREPARE sqa;
# 获取执行动态sql的结果
SET cr = @sName;
if (cr = '张三') THEN
SELECT '成功!' AS '结果';
end IF ;
END //
delimiter ;
执行结果 :