db2 存储过程参数传递--字段类型转换产生的问题
2024-10-19 12:43:40
修改之前的脚本
select count(*)
from dbdk.dtdkg010 A
left join DBDK.DTDKG070 D ON D.PAY_NO = A.PAY_NO
LEFT JOIN CXLFM.DTFMA000_UNIT F ON F.DIV_NO = D.PLN_DIV1 AND F.DIV_NO2=D.PLN_DIV2
LEFT JOIN DBDK.DTDKH900 E ON E.COST_CD = D.COST_CD
LEFT JOIN DBDK.DTDKG071 G ON D.PAY_NO=G.PAY_NO AND D.SER_NO=G.SER_NO
LEFT JOIN CXLCM.DTCM0011 H ON H.TABLE_CODE='DBDK.DTDKG071' AND H.COL_CODE='ACC_TPYE' AND H.OPTION=G.ACC_TPYE
WHERE ((left(replace(VARCHAR(A.APY_DT),'-',''),6)=in_month AND A.PAY_KD IN('','','','','','','','','A','B','C','D','E','X') ))
AND A.PCS_STS=''
AND value(A.TRD_UNION_ACT,'') <> '';
修改之后的脚本
select count(*)
from dbdk.dtdkg010 A
left join DBDK.DTDKG070 D ON D.PAY_NO = A.PAY_NO
LEFT JOIN CXLFM.DTFMA000_UNIT F ON F.DIV_NO = D.PLN_DIV1 AND F.DIV_NO2=D.PLN_DIV2
LEFT JOIN DBDK.DTDKH900 E ON E.COST_CD = D.COST_CD
LEFT JOIN DBDK.DTDKG071 G ON D.PAY_NO=G.PAY_NO AND D.SER_NO=G.SER_NO
LEFT JOIN CXLCM.DTCM0011 H ON H.TABLE_CODE='DBDK.DTDKG071' AND H.COL_CODE='ACC_TPYE' AND H.OPTION=G.ACC_TPYE
WHERE to_char(A.APY_DT,'yyyymm')=in_month AND A.PAY_KD IN('','','','','','','','','A','B','C','D','E','X')
AND A.PCS_STS=''
AND value(A.TRD_UNION_ACT,'') <> '';
传入的参数是 in_month : 201807 这样
查找这个问题的时候,首先上来就是直接替换参数在 dbvi 的命令行执行
select count(*)
from dbdk.dtdkg010 A
left join DBDK.DTDKG070 D ON D.PAY_NO = A.PAY_NO
LEFT JOIN CXLFM.DTFMA000_UNIT F ON F.DIV_NO = D.PLN_DIV1 AND F.DIV_NO2=D.PLN_DIV2
LEFT JOIN DBDK.DTDKH900 E ON E.COST_CD = D.COST_CD
LEFT JOIN DBDK.DTDKG071 G ON D.PAY_NO=G.PAY_NO AND D.SER_NO=G.SER_NO
LEFT JOIN CXLCM.DTCM0011 H ON H.TABLE_CODE='DBDK.DTDKG071' AND H.COL_CODE='ACC_TPYE' AND H.OPTION=G.ACC_TPYE
WHERE ((left(replace(VARCHAR(A.APY_DT),'-',''),6)=''AND A.PAY_KD IN('','','','','','','','','A','B','C','D','E','X') ))
AND A.PCS_STS=''
AND value(A.TRD_UNION_ACT,'') <> '';
此时可以返回正确的结果。
这个时候就开始纳闷儿了,第一个想到的是参数没有传递进去,或者参数的数据类型不对?
在脚本中写入日志表,查看将参数写入日志表,没有问题呀?
第二个想到的是,难道存储过程中执行SQL与命令行中有差异?
DB2的资料本身不多,搜索了好一阵之后,并没有发现,有这个方面的问题,请教了一下同事,也没有遇到类似的问题。
后来转念一想,是不是有可能字段类型转换的时候出问题了?
后来验证了一下,确实是 (left(replace(VARCHAR(A.APY_DT),'-',''),6) 在做类型转换的时候会有差异。
后来证实是根据链接环境的不同转换后的格式会有差异。
解决方案是 给定一个固定的转换格式 to_char(A.APY_DT,'yyyymm')。
问题总算解决了,现在想来,主要是解决问题的思路,和快速反馈,从而快速的定位问题所在。
面对压力的时候,少些抱怨,多集中精力在解决问题的思考上,这样才能比较快的找到问题。
最新文章
- 转!!windows记事本保存“联通” 编码问题
- WNDR3700V4恢复原厂固件(使用TFTP刷网件原厂固件)
- Hadoop1.2.1 全集群3节点安装-rpm安装
- Java类加载器深入探索
- 剑指Offer:面试题18——树的子结构(java实现)
- hdu 1754 线段树模板题
- Memcache入门知识
- Jmeter代理服务器设置
- 蚂蚁通讯框架SOFABolt之私有通讯协议设计
- 使用jQuery重置(reset)表单的方法
- javascript History对象属性和方法
- TerraGate软件安装后,不能启动的解决办法
- WebLogic初学笔记
- C# CheckBox与RadioButton
- Tomcat环境变量配置命令行报错:The JRE_HOME environment variable is not defined correctl This environment variable is needed to run this program
- 【Python】打印object对象
- npm使用入门(package.json)
- StringUtils.isEmpty和StringUtils.isBlank的区别
- HostFileChangeMonitor
- 第二篇:zone(区域)
热门文章
- 常用Git命令清单
- C#内存映射大文件并使用Marshal解析结构体信息
- SQLite 如何清空表数据并将递增量归零
- JavaScript面向对象编程入门
- Binder学习笔记(十二)—— binder_transaction(...)都干了什么?
- ubuntu - 14.04,必须会的技能-安装PPA源中的程序,更大范围使用deb格式安装文件!!
- (multi)set的某些操作
- Python和FTP
- Cannot find module &#39;webpack/bin/config-yargs&#39;
- ubuntu不能自windows拖拽文件解决办法