db2存储过程 动态拼接sql 、输出数据集示例
*****部分都是表名。因为隐私关系,替换为*了。
1 CREATE PROCEDURE "BI_DM"."SP_GCYP_REPORT" (
2 startdate varchar(20)
3 )
4 dynamic result sets 1
5 LANGUAGE SQL
6
7 begin
8 declare L_Workdate_Start INT;
9 declare D_Workdate_Start DATE;
10 declare D_Workdate_End DATE;
11
12 ---动态sql变量声明
13 --declare sqlcreatetable varchar(5000);
14 declare sqldelete varchar(5000);
15 declare sqlinsert varchar(5000);
16 declare sql1 varchar(5000);
17 declare sql2 varchar(5000);
18 declare sql3 varchar(5000);
19 declare sqlinsert2 varchar(5000);
20
21 declare monthnumber varchar(32);
22 declare lastmonthnumber varchar(32);
23 declare yearnumber varchar(32);
24
25 --循环参数
26 declare num1 varchar(32);
27 declare num2 varchar(32);
28
29
30 --------------定义输出游标,定义必须在变量赋值的上面,否则会报错。max合并前三列,和最后一列-------------------------------------
31 declare clientcur cursor with return
32 for
33 select id,b.ITEMNAME
34 ,max(本月采购数量) as 本月采购数量
35 ,max(上月末库存数量) as 上月末库存数量
36 ,max(本月采购总金额) as 本月采购总金额
37 ,max(本月院内使用数量) as 本月院内使用数量
38 from ***** a
39 join ***** b on a.ID=b.itemid
40 group by id,b.ITEMNAME;
41
42 --------------定义输出游标-------------------------------------
43
44
45 -- set D_Workdate_Start=to_date(substr(startdate,1,8)||'01 00:00:00','yyyy-mm-dd hh24:mi:ss');
46 set D_Workdate_Start=to_date(startdate||' 00:00:00','yyyy-mm-dd hh24:mi:ss');
47 set D_Workdate_Start= truncate(D_Workdate_Start,'MM');--获取选取的月份第一天
48 set D_Workdate_End=D_Workdate_Start + 1 month;
49
50 set monthnumber=case when month(D_Workdate_Start)<10 then 0||to_char(month(D_Workdate_Start)) else to_char(month(D_Workdate_Start)) end;
51 set lastmonthnumber=case when (month(D_Workdate_Start)-1)<10 then 0||to_char(month(D_Workdate_Start)-1) else to_char(month(D_Workdate_Start)-1) end;
52 set yearnumber=year(D_Workdate_Start);
53
54
55 ---- ---- ----此为建表备用,如果没有该表则创建 ---- ---- ---- ----
56 /*
57 set sqlcreatetable =' create table ******
58 (ID varchar(128)
59 ,ITEMNAME varchar(128)
60 ,本月采购数量 varchar(128)
61 ,上月末库存数量 varchar(128)
62 ,本月采购总金额 varchar(128)
63 ,本月院内使用数量 varchar(128)
64 )';
65
66 if ((select count(1) from syscat.tables where TABNAME='*****')=0)
67 then
68 PREPARE create1 FROM sqlcreatetable;
69 EXECUTE create1;
70 end if;*/
71 ---- ---- ----此为建表备用,如果没有该表则创建 ---- ---- ---- ----
72
73
74
75 --------------循环算每个月库存-------------------------------------
76 set sql2=' ';
77 set num1=to_number(monthnumber);
78
79 while num1 > 0 do
80 set num2=case when to_char(num1)<10 then 0||to_char(num1) else to_char(num1) end;
81
82 set sql2=sql2||'M'||num2||'I_Q
83 - M'||num2||'O_Q
84 + ';
85 set num1=num1-1;
86 end while;
87 ------------------去掉最后的加号---------------------------------
88 set sql2=substr(sql2,1,length(sql2)-2);
89 --------------循环算每个月库存-------------------------------------
90
91
92 --------------插入拼接的三列数据-------------------------------
93 set sql1='M'||monthnumber||'I_Q as 本月采购数量,';
94 set sql2=sql2||' + M00E_Q as 上月末库存数量,'; -----最后加上年初
95 set sql3='M'||monthnumber||'I_S as 本月采购总金额,';
96
97 if to_number(monthnumber)=1 ---如果是1月,执行用年初库存数量
98 then
99 set sql2='M00E_Q as 上月末库存数量,';
100
101 end if;
102 ---------------------------------------------------
103 set sqldelete='delete from ********';
104 set sqlinsert='insert into ********(ID,本月采购数量,上月末库存数量,本月采购总金额,本月院内使用数量)
105 select ITEMID,'||sql1||sql2||sql3||'0
106 from SSA_HIS.INV_DRUG_MONTH
107 where ORGID_PL=''010101030201''
108 and ITEMID in (
109 select a.ITEMID
110 from ********* a
111 where NEGOTIATESMEDICINEFLAG=1)
112 and year='||yearnumber;
113 --------------插入拼接的三列数据-------------------------------
114
115
116
117 ------------插入本月院内使用数量-----------------------------------
118
119 set D_Workdate_Start=to_date(D_Workdate_Start,'yyyy-mm-dd');
120 set D_Workdate_End=to_date(D_Workdate_End,'yyyy-mm-dd');
121 set sqlinsert2='insert into *********(ID,本月院内使用数量)
122 SELECT b.ITEMID
123 , SUM(b.Quantity ) Quantity
124 from (
125 select ITEMID
126 from *********
127 where ItemID in (select ItemID
128 from ******** a
129 where NEGOTIATESMEDICINEFLAG=1 )
130 and CateID like ''01%''
131 )a
132 join ******** b on a.ITEMID =b.ITEMID
133 where b.BillDate > to_date('''||D_Workdate_Start||''',''yyyy-mm-dd'')
134 AND b.BillDate <= to_date('''||D_Workdate_End||''',''yyyy-mm-dd'')
135 group by b.ItemID ';
136 ------------插入本月院内使用数量-----------------------------------
137
138 PREPARE delete1 FROM sqldelete; --清除历史记录
139 EXECUTE delete1;
140 PREPARE insert1 FROM sqlinsert;--插入月库存
141 EXECUTE insert1;
142 PREPARE insert2 FROM sqlinsert2;--插入使用量
143 EXECUTE insert2;
144
145
146
147
148
149 open clientcur;
150
151 end
db2存储过程 动态拼接sql 、输出数据集示例的更多相关文章
- mysql 存储过程动态拼接sql并执行赋值
)) BEGIN ## 定义变量 ,) ; ## @表示全局变量 相当于php $ ## 拼接赋值 INTO 必须要用全局变量不然语句会报错 SET @strsql = CONCAT('SELECT ...
- mysql 存储过程动态执行sql语句
之前经常在程序中拼接sql语句,其实我们也可以在存储过程中拼接sql 语句,动态的执行~~ 代码如下: DROP PROCEDURE IF EXISTS SearchByDoctor;CREATE P ...
- 动态拼接 sql的时候 里面 如果有变量的话 按上面的方式进行处理
set @Sql_Sql = N' select top 1 @m_zw=zw,@m_zh=temp from ket where zd=''ddd'' ' print @Sql_Sql EXEC s ...
- java动态拼接sql语句并且执行时给sql语句的参数赋值
问题 在这里举一个例子,比如我要做一个多条件模糊查询,用户输入的时候有可能输入一个条件,也有可能输入两个条件,这时执行查询的sql语句就不确定了,但可以用动态拼接sql语句来解决这个问题. 解决方法 ...
- python 根据传进来的参数,动态拼接sql
根据传进来的参数,动态拼接sql,可用于实现一个方法,有些字段不确定,又用到的情况,如查询,三个查询条件,有的时候只用到一个查询条件,其他用不到则不需要拼接 def show_runjob_detai ...
- 存储过程中拼接SQL语句
很多时候我们需要利用参数在存储过程中重新组织SQL语句,在存储过程中拼接的SQL语句只是一个字符串,不会被直接执行,所以加一个execute执行它就可以了.具体看如下演示代码: 代码: set ANS ...
- 在mysql存储过程中拼接sql解决in的字段类型不匹配问题
一个朋友问我一个问题,他写了一个存储过程,并在存储过程调用了另外一个自定义的函数.该函数返回类型如'1,34,56'的字符串,并将该字符串作为存储过程的select的id条件. begin DECLA ...
- MSSQL存储过程实现拼接sql的注意点
这里我昨天碰到的问题就是执行一段根据变量tableName对不同的表进行字段状态的更改.由于服务器原因,我不能直接在数据访问层写SQL,所以只好抽离出来放到存储过程里面. 这里就出现了一个问题,我花费 ...
- Java 使用Query动态拼接SQl
之前有做个一个自定义报表的查询,这里使用的是一个动态的sql拼接,是前端选择了什么指标就查询什么信息!(这里的指标是多个表的字段,前端随便选择了这些指标,然后后端根据这些指标拼接sql,返回这些指标的 ...
- db2存储过程动态sql被截断
编写存储过程,使用动态sql时,调试时发现变量赋值后被截断. 关键代码如下: 实现的效果是先把上下游做对比的sql语句和相关参数存入RKDM_DATA_VOID_RULE, 执行存储过程后把两个sql ...
随机推荐
- ATM项目开发
目录 一.项目开发流程 1.项目需求分析: 2.项目架构设计: 3.项目分组开发: 4.项目提交测试: 5.项目交付上线: 二.项目需求分析 1.主题 2.项目核心 3.项目需求: 4.从需求中提炼出 ...
- Docker安装elasticsearch、kibana
一.Docker 安装elasticsearch 7.10 1. 拉取镜像 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10 ...
- P1_Day1.学习目标
目标 能够知道如何创建小程序项目 能够清楚小程序项目的基本组成结构 能够知道小程序页面由几个部分组成 能够知道小程序中常见的组件如何使用 能够知道小程序如何进行协同开发和发布 学习目录 小程序简介 第 ...
- 视觉十四讲:第七讲_3D-2D:P3P
1.P3P P3P输入数据为三对3D-2D的匹配点,一个单目相机,经过初始化,得到初始的3D点,就可以依次得到后续的姿态和3D点. ABC是上一时刻求的的3D点, abc是与上一次时刻的匹配点.利用相 ...
- Docker自建仓库搭建记录
https://blog.csdn.net/u011943534/article/details/81331231 https://blog.csdn.net/u013165156/article/d ...
- Istio 升级后踩的坑
背景 前段时间我们将 istio 版本升级到 1.12 后导致现有的应用监控有部分数据丢失(页面上显示不出来). 一个是应用基础信息丢失. 再一个是应用 JVM 数据丢失. 接口维度的监控数据丢失. ...
- CentOS7一键安装RPM版LNMP(NGINX+PHP+MySQL)环境
转载:简书 CentOS7一键安装RPM版LNMP(NGINX+PHP+MySQL)环境 - 简书 (jianshu.com) (需要配置nginx.conf文件) 转载:csdn (35条消息) V ...
- vue还可以这样写
1.这两种写法都可以: var vm = new Vue({ data(){ return { scaleFlag:'big', } }, //data:{}, created: function ( ...
- 世界UTC时间时区对照图
- 富士胶片2105N打印机安装说明
打开驱动文件,执行软件 自定义安装驱动 手动输入IP地址 下一步安装完成 自定义安装扫描软件 选择print & scan 下一步安装完成