mysql 动态执行sql
drop PROCEDURE if exists my_procedure;
create PROCEDURE my_procedure()
BEGIN
declare my_sqll varchar(500);
set my_sqll='select * from aa_list';
set @ms=my_sqll;
PREPARE s1 from @ms;
EXECUTE s1;
deallocate prepare s1;
end;
解释:
1、set @ms=my_sqll; —注意这句很重要,字符串赋值给一个变量(可以之前没有定义,但要以@开头)
2、prepare s1 from @ms; —预处理需要执行的动态SQL,其中stmt是一个变量
3、execute s1; ——执行SQL语句
4。deallocate prepare s1 ; —释放掉预处理段
eg:拼接字符串、动态执行sql、动态赋值
SET @VARNAME=’李’;
--拼接字符串,其中?是执行拼接字符串语句的参数,@TestName是结果值
SET@SQLStr0=CONCAT(‘SELECT TestName INTO @TestName FROM test.t_TestTable WHERETest_ID>? AND TestName LIKE “%’,@VARNAME,’%” LIMIT 1;’);
-- 预处理拼接好的字符串
PREPARE SQLStr1 FROM@SQLStr0;
-- 为参数赋值
SET @Test_ID=1;
-- 使用参数执行拼接好的字符串语句
EXECUTE SQLStr1USING @Test_ID;
-- 释放拼接的字符串语句
DEALLOCATE PREPARESQLStr1;
SELECT @TestName;—获取结果值
还没有评论,来说两句吧...