修改之前的脚本

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. Bootstrap 的 Dropdown

    一.简介 Dropdown 就是下拉列表,这里 有一个例子. Dropdown 的完整代码如下: <div id="dropdownWrapper"> <butt ...

  2. Git知识点汇总

    设置全局用户名 git config --global user.name "yourname" 设置全局邮箱 git config --global user.email &qu ...

  3. Java50道经典习题-程序24 根据输入求输出

    题目:给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字.分析: (1)利用随机函数产生[1,99999]之间的一个正整数n (2)将n转换成字符串s,调用字符串的length( ...

  4. Mac下的UI自动化测试 (四)

    在实际写testcase的时候会使用unittest框架,但是在sikuli中需要使用它提供的command来运行,位于/Applications/SikuliX.app/run,使用-r参数指定要运 ...

  5. 【转载】在AspNetCore 中 使用Redis实现分布式缓存

    原文地址:https://www.cnblogs.com/szlblog/p/9045209.html AspNetCore 使用Redis实现分布式缓存 上一篇讲到了,Core的内置缓存:IMemo ...

  6. c#静态方法和非静态方法区别

    c#静态方法和非静态方法区别 C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用上会有什么不同呢?让我们来看看最直观的差别:使用了static 修饰符的方法为 ...

  7. 算法训练 Cowboys(DP)

    问题描述 一个间不容发的时刻:n个牛仔站立于一个环中,并且每个牛仔都用左轮手枪指着他旁边的人!每个牛仔指着他顺时针或者逆时针方向上的相邻的人.正如很多西部片那样,在这一刻,绳命是入刺的不可惜……对峙的 ...

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

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

  9. soj 131 找题

    soj 131 找题 给出两个长度为n,都含k个1的字符串A,B.现在令\(a_1,a_2,\dots,a_k\)是A中1的下标,\(b_1,b_2,\dots,b_k\)是B中1的下表,然后将a,b ...

  10. Cannot find module 'webpack/bin/config-yargs'

    1.版本不兼容 npm install webpack-dev-server@1.15.0 -g