楼主: Nicey_123

toad连接数据库选择database explorer老是报SQL0401N错误

[复制链接]
论坛徽章:
3
优秀写手
日期:2014-04-05 06:00:12慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39
11#
 楼主| 发表于 2014-11-16 21:55 | 只看该作者
komicakomica 发表于 2014-11-16 21:19
设置DB2_DEFERRED_PREPARE_SEMANTICS后的表现跟文档描述的不太一样,文档说是根据类型描述符决定变量类型, ...

终于可以了,太感谢了,我把db2 set DB2_DEFERRED_PREPARE_SEMANTICS=NO,重启实例可以了!太感谢了!我的字符集不能改,因为GBK字符集(采用两个字节存储一个汉字),UTF-8字符集,由于UTF-8采用三字节存储一个汉字,不适合我现在的系统用。
     这个变量DB2_DEFERRED_PREPARE_SEMANTICS是干嘛的,其实我还不是很明白,你能说说么?

使用道具 举报

回复
论坛徽章:
5
慢羊羊
日期:2015-03-04 14:55:272015年新春福章
日期:2015-03-06 11:59:47喜羊羊
日期:2015-04-02 19:59:02懒羊羊
日期:2015-05-17 21:03:29懒羊羊
日期:2015-05-20 20:04:36
12#
发表于 2014-11-16 22:10 | 只看该作者
Nicey_123 发表于 2014-11-16 21:55
终于可以了,太感谢了,我把db2 set DB2_DEFERRED_PREPARE_SEMANTICS=NO,重启实例可以了!太感谢了!我的 ...

参数标记“?”这个东西知道吧,设置DB2_DEFERRED_PREPARE_SEMANTICS可以改变决定参数标记变量实际类型的方式。
举例 执行values 1+?,?传入数值1.5,问显示结果是多少?
DB2_DEFERRED_PREPARE_SEMANTICS=NO时:根据“?”的上下文决定类型。因为这里的“?”处在双目操作符"+"的一侧,DB2会认为“?”的类型是和“+”另一侧的变量相同的,也就是int,执行values 1+cast (1.5 as int),结果为2。
DB2_DEFERRED_PREPARE_SEMANTICS=YES时:根据传入变量的字面量决定类型,也即变量硬编码时决定类型的方法。此时执行的是values 1+1.5,结果2.5。

使用道具 举报

回复
论坛徽章:
5
慢羊羊
日期:2015-03-04 14:55:272015年新春福章
日期:2015-03-06 11:59:47喜羊羊
日期:2015-04-02 19:59:02懒羊羊
日期:2015-05-17 21:03:29懒羊羊
日期:2015-05-20 20:04:36
13#
发表于 2014-11-16 22:20 | 只看该作者
因为变量类型会影响执行计划的生成,把参数绑定推迟到执行阶段,也就意味着每次执行时都要重新生成执行计划,以应对可能不同的参数类型。这样的话就失去了使用参数变量时执行计划一次生成,多次重复利用的优势。如果是语句复杂(特别是join很多的时候),生成执行计划时间长的场合,设置DB2_DEFERRED_PREPARE_SEMANTICS对性能可能有负面影响。(这一段是自己的猜测,没有经过验证)

使用道具 举报

回复
论坛徽章:
5
慢羊羊
日期:2015-03-04 14:55:272015年新春福章
日期:2015-03-06 11:59:47喜羊羊
日期:2015-04-02 19:59:02懒羊羊
日期:2015-05-17 21:03:29懒羊羊
日期:2015-05-20 20:04:36
14#
发表于 2014-11-16 22:25 | 只看该作者
DB2的官方资料pdf文档中有一个文件DB2SQLRefVol1-db2s1e972.pdf,在里面搜索“Determining data types of untyped expressions”,是讲隐式类型映射规则的。

使用道具 举报

回复
论坛徽章:
3
优秀写手
日期:2014-04-05 06:00:12慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39
15#
 楼主| 发表于 2014-11-17 12:08 | 只看该作者
komicakomica 发表于 2014-11-16 22:10
参数标记“?”这个东西知道吧,设置DB2_DEFERRED_PREPARE_SEMANTICS可以改变决定参数标记变量实际类型的方 ...

说的很清楚明白!太感谢了!有机会会在好好研究一下这个参数,你这样说来,我觉得还是先不要设置这个参数了。

使用道具 举报

回复
论坛徽章:
3
优秀写手
日期:2014-04-05 06:00:12慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39
16#
 楼主| 发表于 2014-11-17 12:13 | 只看该作者
komicakomica 发表于 2014-11-16 21:12
非Unicode,可以换成codepage=1208吗。
http://www-01.ibm.com/support/docview.wss?uid=swg1IC67116
I ...

我觉得你对这些资料好熟悉哦,能告诉我一下你是怎么用ibm的资料库,和你是怎么找到toad for db2 的dell知识库页面么?(汗,我看了你给的链接才知道toad 是dell公司开发的。。。。)

使用道具 举报

回复
论坛徽章:
5
慢羊羊
日期:2015-03-04 14:55:272015年新春福章
日期:2015-03-06 11:59:47喜羊羊
日期:2015-04-02 19:59:02懒羊羊
日期:2015-05-17 21:03:29懒羊羊
日期:2015-05-20 20:04:36
17#
发表于 2014-11-17 22:07 | 只看该作者
Nicey_123 发表于 2014-11-17 12:13
我觉得你对这些资料好熟悉哦,能告诉我一下你是怎么用ibm的资料库,和你是怎么找到toad for db2 的dell知 ...

看一下这里:http://www.itpub.net/thread-1897449-1-1.html
这个bug的话,直接丢google就好了,第一页就能找到答案。
下回再遇到问题就可以搜apar+问题关键字,如果结果中有ibm网站页面的话多数能找到解决办法。

使用道具 举报

回复
论坛徽章:
3
优秀写手
日期:2014-04-05 06:00:12慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39
18#
 楼主| 发表于 2014-12-12 14:54 | 只看该作者
komicakomica 发表于 2014-11-17 22:07
看一下这里:http://www.itpub.net/thread-1897449-1-1.html
这个bug的话,直接丢google就好了,第一页就 ...

我想问个,我们现在通过前台java连接后台数据库,点一个提交操作时,后台发出一个sql:报了下面这样的错
SELECT t_field, s_expression
                  FROM hy_jgbs_fetch_tables_def
                 WHERE t_report_no = ?
                   AND begin_date <= ?
                   AND end_date > ?
[14-12-12 12:10:11:295 CST] 00000072 BaseAction    E com.hyframe.application.action.DataAmendDetailAction queryFetchRuleSrcRptStatus The value of a host variable in the EXECUTE or OPEN statement is too large for its corresponding use.. SQLCODE=-302, SQLSTATE=22001, DRIVER=3.50.152

我们上午查了:
DB2_DEFERRED_PREPARE_SEMANTICS是另一个和DB2的Oracle兼容特性相关的环境变量,它用来控制诸如Java或者C#编写的应用程序兼容性。如下所示,将该变量值设为YES:

db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES

这样做有什么好处呢?我们知道,从DB2 V9.7开始引入了隐式类型映射,它支持应用程序的动态语句中出现未定义类型参数标注符(Untyped Parameter Markers),但是这样的动态语句会在准备阶段报错。通过将db2set DB2_DEFERRED_PREPARE_SEMANTICS设置为YES,能避免在准备阶段求值,从而在执行阶段进行动态参数绑定,这为应用程序提供了动态绑定能力。


我这个问题会是因为没有设置DB2_DEFERRED_PREPARE_SEMANTICS设置为YES导致的吗?我觉得应该不是吧。。。这只是传一个sql进来查询,后台toad执行这个sql都好好的。。。

我想在问个,我现在的数据库版本是9.7.0,没有设置DB2_DEFERRED_PREPARE_SEMANTICS使用前台有以上问题。
另外一个环境数据库版本是9.7.8,也没有设置DB2_DEFERRED_PREPARE_SEMANTICS,前台使用没有以上问题。。。。

我现在就想先定位,我的9.7.0版本的和没有设置这个变量有关系么?如果我需要设置这个,在9.7.0上面使用会有副作用么。。。。

使用道具 举报

回复
论坛徽章:
3
优秀写手
日期:2014-04-05 06:00:12慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39
19#
 楼主| 发表于 2014-12-12 14:58 | 只看该作者
我认为我们前台报错,不是这个变量没有设置的问题。
我们的前台java人员认为是这个问题。。

使用道具 举报

回复
论坛徽章:
5
慢羊羊
日期:2015-03-04 14:55:272015年新春福章
日期:2015-03-06 11:59:47喜羊羊
日期:2015-04-02 19:59:02懒羊羊
日期:2015-05-17 21:03:29懒羊羊
日期:2015-05-20 20:04:36
20#
发表于 2014-12-13 12:33 | 只看该作者
Nicey_123 发表于 2014-12-12 14:54
我想问个,我们现在通过前台java连接后台数据库,点一个提交操作时,后台发出一个sql:报了下面这样的错
...

最大可能是java传参数时用的java.util.date而不是java.sql.date,我以前也遇到过。
和DB2_DEFERRED_PREPARE_SEMANTICS没有关系。
改成
SELECT t_field, s_expression
                  FROM hy_jgbs_fetch_tables_def
                 WHERE t_report_no = ?
                   AND begin_date <= cast (? as date)
                   AND end_date >  cast (? as date)
再试一下。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表