写MySQL存储过程实现动态执行SQL
--存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数create procedure p_procedurecode(in sumdate varchar(10))
begindeclare v_sql varchar(500);    --需要执行的SQL语句declare sym varchar(6);declare var1 varchar(20);declare var2 varchar(70);declare var3 integer;--定义游标遍历时,作为判断是否遍历完全部记录的标记declare no_more_departments integer DEFAULT 0;     --定义游标名字为C_RESULT DECLARE C_RESULT CURSOR FORSELECT barcode,barname,barnum FROM tmp_table;--声明当游标遍历完全部记录后将标志变量置成某个值DECLARE CONTINUE HANDLER FOR NOT FOUNDSET no_more_departments=1;set sym=substring(sumdate,1,6);     --截取字符串,并将其赋值给一个遍历--连接字符串构成完整SQL语句,动态SQL执行后的结果记录集,在MySQL中无法获取,因此需要转变思路将其放置到一个临时表中(注意代码中的写法)。一般写法如下:--     'Create TEMPORARY Table   表名(Select的查询语句);set v_sql= concat('Create TEMPORARY Table tmp_table(select aa as aacode,bb as aaname,count(cc) as ccnum from h',sym,' where substring(dd,1,8)=''',sumdate,''' group by aa,bb)');set @v_sql=v_sql;   --注意很重要,将连成成的字符串赋值给一个变量(可以之前没有定义,但要以@开头)prepare stmt from @v_sql;  --预处理需要执行的动态SQL,其中stmt是一个变量EXECUTE stmt;      --执行SQL语句deallocate prepare stmt;     --释放掉预处理段OPEN C_RESULT;       --打开之前定义的游标REPEAT                      --循环语句的关键词FETCH C_RESULT INTO VAR1, VAR2, VAR3;   --取出每条记录并赋值给相关变量,注意顺序--执行查询语句,并将获得的值付给一个变量 @oldaacode(注意如果以@开头的变量可以不用通过declare语句事先声明)select @oldaacode:=vcaaCode from T_sum where vcaaCode=var1 and dtDate=sumdate; if @oldaacode=var1 then    --判断update T_sum set iNum=var3 where vcaaCode=var1 and dtDate=sumdate;elseinsert into T_sum(vcaaCode,vcaaName,iNum,dtDate) values(var1,var2,var3,sumdate);end if;UNTIL no_more_departments  END REPEAT;    --循环语句结束CLOSE C_RESULT;                            --关闭游标DROP TEMPORARY TABLE tmp_table;       --删除临时表
end;

posted on 2013-03-19 10:59 天使半只翼 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/william-lin/archive/2013/03/19/2968727.html

写MySQL存储过程实现动态执行SQL相关推荐

  1. mysql存储过程执行update_MySQL存储过程实现动态执行SQL

    --存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数 create procedure p_procedurecode(in sumdate varchar(1 ...

  2. mysql(十)条件语句、循环语句、动态执行SQL语句

    MySQL数据库-条件语句.循环语句.动态执行SQL语句 1.if条件语句 delimiter \\ CREATE PROCEDURE proc_if () BEGINdeclare i int de ...

  3. mysql带参数的sql_MySql存储过程是带参数的存储过程(动态执行SQL语句)

    下文介绍的MySql存储过程是带参数的存储过程(动态执行SQL语句),该MySql存储过程是根据用户输入的条件和排序方式查询用户的信息,排序条件可以没有调用方式: call GetUsersDynam ...

  4. mysql函数 动态语句_自定义函数动态执行SQL语句

    Oracle 动态SQL有两种写法:用 DBMS_SQL 或 execute immediate,建议使用后者. DDL 和 DML Sql代码 收藏代码 /*** DDL ***/ begin EX ...

  5. SQL Server 中 EXEC全称execute 与 SP_EXECUTESQL动态执行sql代码语句 的区别

    先睹为快 use cplvfx_DBdeclare @sqlStr nvarchar(max)set @sqlStr='select top 100 * from User'exec (@sqlStr ...

  6. oracle中执行动态sql语句吗,oracle中有没有可动态执行sql语句的函数

    oracle中有没有可动态执行sql语句的函数 关注:233  答案:2  手机版 解决时间 2021-03-05 15:53 提问者祗剩寂寞 2021-03-04 22:38 oracle中有没有可 ...

  7. mysql 执行cmd,mysql命令行中执行sql的几种方式总结

    1.直接输入sql执行 MySQL> select now(); +---------------------+ | now() | +---------------------+ | 2013 ...

  8. mysql的调用有哪三种方式_MySQL数据库之mysql命令行中执行sql的几种方式总结

    本文主要向大家介绍了MySQL数据库之mysql命令行中执行sql的几种方式总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1.直接输入sql执行 MySQL> se ...

  9. 在mysql命令行下执行sql文件

    ***********在mysql命令行下执行sql文件*********** C:\Windows\system32>cd E:\MySQL\mysql-5.7.16-winx64\bin / ...

最新文章

  1. python pytest_Python项目的pytest初始化
  2. 频繁项集挖掘之Aprior和FPGrowth算法
  3. 推理集 —— 思维的误区
  4. python基础学习——函数和方法的区别与联系
  5. Openpose——windows编译(炒鸡简单)
  6. 如何高效学习前端新知识,我推荐这些~
  7. 邮件系统之webmail
  8. 解析“60k”大佬的19道C#面试题(上)
  9. Taro+react开发(2)--简介2
  10. 如何实现两个数据库之间的同步
  11. 常用的linux文件权限
  12. SSH三大框架的概述
  13. Mac上的包管理器Homebrew的介绍及安装和使用实践
  14. 拓端tecdat|基于matlab的Lorenz系统仿真可视化
  15. 线性代数中一些有关秩的不等式
  16. Altium Designer生成网表 导出网表【worldsing笔记】
  17. c语言用后缀字母表示不同数制,C语言基础知识总结
  18. Qt文件选择复制另存为
  19. 计算机启动显示安装程序正在启动服务,安装程序正在启动服务需要多久
  20. Java将被取代?大数据让你知道真实的Java应用现况

热门文章

  1. openresty完全开发指南_FDA拟修订群体药代动力学指南:医药商需要了解些什么?...
  2. java模拟atm 课程设计_急求,关于Java课程设计ATM创建实现
  3. jtoken判断是否包含键_Redis列表键(linkedlist/ziplist)的介绍
  4. 微型计算机控制技术黄勤期末,微型计算机控制技术作者黄勤第4章__工控机的抗干扰课案.ppt...
  5. spring cloud入门_SpringBoot 入门系列0SpringBoot与SpringCloud技术选型
  6. java http 接口制定_java調用http接口
  7. mysql 排除另一表_MYSQL 两表 排除 重复记录
  8. java 面试题三十三 子类父类方法执行顺序的问题
  9. 飞机大战-控制玩家飞机左右移动
  10. 命令执行无回显的一些姿势