修改之前的脚本

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')。

问题总算解决了,现在想来,主要是解决问题的思路,和快速反馈,从而快速的定位问题所在。

面对压力的时候,少些抱怨,多集中精力在解决问题的思考上,这样才能比较快的找到问题。

db2 存储过程参数传递--字段类型转换产生的问题的更多相关文章

  1. DB2 存储过程创建、系统表

    前段时间做了数据表拆分,进行数据迁移,用到一些SQL命令,语句记录下来 db2look是DB2用于生成数据库DDL语句的一个工具: 命令:db2look -d DBname -a -e -p -i u ...

  2. DB2读取CLOB字段-was报错:操作无效:已关闭 Lob。 ERRORCODE=-4470, SQLSTATE=null

    DB2读取CLOB字段-was报错:操作无效:已关闭 Lob. ERRORCODE=-4470, SQLSTATE=null 解决方法,在WAS中要用的数据源里面配置连个定制属性: progressi ...

  3. python dataframe astype 字段类型转换

    使用dtype查看dataframe字段类型 print df.dtypes 使用astype实现dataframe字段类型转换 # -*- coding: UTF-8 -*- import pand ...

  4. oracle 存储过程详细介绍(创建,删除存储过程,参数传递等)

    这篇文章主要介绍了oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包等相关资料,需要的朋友可以参考下   oracle 创建,删除存储过程,参数传递,创建 ...

  5. db2存储过程

    一. 使用存储过程的好处 1. 减少客户机与服务器之间的网络使用率,以及数据库锁定保持的时间 应用程序通常在执行每个SQL语句都要跨网络两次,存储过程可以将SQL语句集中在一起, 从而使得对于每一组S ...

  6. mysql中字段类型转换排序

    表中字段server_id是varchar类型,现在我们查询数据时想以server_id排一下序,排序后的结果 select server_id from cardserver where game_ ...

  7. DB2修改表字段

    1:删除字段非空属性 alter table XXX alter column XXX drop not null 此特性需要DB2 9.0以上的版本 2:添加字段非空属性alter table XX ...

  8. DB2存储过程语法规则

    如何声明一个存储过程CREATE PROCEDURE 存储过程名(IN 输入变量名 输入变量类型,OUT 输出变量名 输出变量类型)紧跟其后的是存储过程属性列表            常用的有:LAN ...

  9. linux命令行执行db2存储过程

    存储过程代码如下: CREATE PROCEDURE proc_sum2(IN n INT,OUT sum INT,OUT j INT) BEGIN DECLARE i INT; ; ; ; WHIL ...

随机推荐

  1. 【转】基于OCS实现高速缓存

    OCS简介 OCS( Open Cache Service)为分布式高速缓存服务,主要实现热点数据的快速响应: OCS支持Key/Value的数据结构,兼容memcachebinary protoco ...

  2. Hyper-V 中遇到错误 'vm' could not initialize

    不知道前面做了什么操作,但当我启动我的虚拟机时遇到了'vm' could not initialize的错误,如下图: 在几番尝试未果后,找到了如下解决方法: 以管理员模式启动cmd,执行命令 net ...

  3. Spring.Net 未将对象引用设置到对象的实例

    “/”应用程序中的服务器错误. 未将对象引用设置到对象的实例. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详 ...

  4. jQuery的选择器+实例

    返回目录 jQuery的冒号选择器 表单  :input :text :password :radio :checkbox :submit :image :reset :button :file :h ...

  5. nodejs nodejs的操作

    nodejs的操作 由于版本造成的命令不能正常安装,请参考五问题 一.概念: 参考百度百科: http://baike.baidu.com/link?url=aUrGlI8Sf20M_YGk8mh-- ...

  6. Linux之创建777权限的文件

    服务器中运行项目的时候,有时候会出现图片上传失败,查看报错原因才知道是文件夹没有写入权限导致上传失败. 方案1: 在使用Linux命令更改对应目录的权限 方案2: 在代码中创建文件夹的时候给予对应的7 ...

  7. day05.1-文件归档与压缩

    >:覆盖式修改文件内容.如: a). cat   /etc/passwd   >   new_pass.txt(将/etc/passwd中的内容覆盖式复制到new_pass.txt中,若n ...

  8. 学习高性能mysql

    Mysql 的InnoDB存储引擎实现的不是简单的行级锁,实现的是MVCC,多版本并发控制,可以理解成行级锁的一个变种. InnoDB的MVCC是通过在每行纪录后面保存两个隐藏的列来实现的.这两个列, ...

  9. AB二进制

    Description 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数. 例如: (13)10=(1101)2        ...

  10. [SinGuLaRiTy] NOIP模拟赛(TSY)-Day 2

    [SinGuLaRiTy-2033] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved.                              ...