博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL存储过程实现动态执行SQL
阅读量:4616 次
发布时间:2019-06-09

本文共 1948 字,大约阅读时间需要 6 分钟。

--存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数create procedure p_procedurecode(in sumdate varchar(10))   begin     declare 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 FOR             SELECT barcode,barname,barnum FROM tmp_table;    --声明当游标遍历完全部记录后将标志变量置成某个值     DECLARE CONTINUE HANDLER FOR NOT FOUND             SET 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;           else               insert 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;

 

转载于:https://www.cnblogs.com/abc8023/p/6397804.html

你可能感兴趣的文章
jQuery源码笔记(一):jQuery的整体结构
查看>>
servlet 的生命周期
查看>>
tar: Removing leading `/’ from member names
查看>>
NPC问题
查看>>
mysql常用命令小结
查看>>
MySQL字符集及校对规则的理解
查看>>
微信程序开发系列教程(二)使用JavaScript给微信用户发送消息
查看>>
ERP和C4C中的function location
查看>>
如何在SAP里创建configurable material物料主数据
查看>>
[转]C#设置WinForm快捷键
查看>>
中文版 R-FCN: Object Detection via Region-based Fully Convolutional Networks
查看>>
仿照支付宝账单界面--listview分组显示 用来做!发!财树充值交易明细
查看>>
java.lang.NoSuchMethodError:
查看>>
博客美化
查看>>
Appium下载和配置
查看>>
第三周总结
查看>>
cocos2dx plist
查看>>
python TCP时间戳服务器端、客户端
查看>>
JAVA输出带BOM的UTF-8编码的文件
查看>>
RDIFramework.NET 框架之组织机构权限设置
查看>>