mysql 动态执行sql

迷南。 2021-06-24 14:00 713阅读 0赞
  1. drop PROCEDURE if exists my_procedure;
  2. create PROCEDURE my_procedure()
  3. BEGIN
  4. declare my_sqll varchar(500);
  5. set my_sqll='select * from aa_list';
  6. set @ms=my_sqll;
  7. PREPARE s1 from @ms;
  8. EXECUTE s1;
  9. deallocate prepare s1;
  10. 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;—获取结果值

发表评论

表情:
评论列表 (有 0 条评论,713人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL 动态sql

    今天,主要学习MyBatis的动态SQL。这是MyBatis的强大特性之一。 动态SQL的作用 MyBatis的动态SQL主要就是为了解决手动拼接SQL的麻烦 动态SQ

    相关 Mybatis 动态执行SQL语句

    有很多的接口都只是执行个SQL查询之后就直接返回给前端,那么我们能不能把这些SQL保存在数据库中,调用一个固定的接口就能根据传参查询出想要的数据呢?或者当为了加减个字段就得修改