如何从 DB2 获取描述性错误消息?
Posted
技术标签:
【中文标题】如何从 DB2 获取描述性错误消息?【英文标题】:How to get descriptive error messages from DB2? 【发布时间】:2011-02-12 18:56:19 【问题描述】:当我通过 DB2 上的 JDBC 调用 SQL 语句并且该语句失败时,我捕捉到带有以下消息文本的 SQLException:
com.ibm.db2.jcc.a.nn: DB2 SQL Error: SQLCODE=-206, SQLSTATE=42703,
SQLERRMC=O.METADATENSATZ, DRIVER=3.52.95
我尝试根据error list published by IBM 自动翻译消息,但消息中存在引用异常其他元素的占位符。
在异常中查找这些元素时,我找到了DB2ExceptionFormatter
并尝试使用它来访问缺失的元素。
但在这里我停了下来,因为DB2ExceptionFormatter
给了我一个线索:
尝试从服务器获取消息文本时出错。只有消息令牌可用。
所以我的问题是:我必须配置什么才能从 DB2 服务器获得正确的消息?
如果我可以从服务器获得人类可读的消息,我可以直接使用它,而不必自己翻译。
【问题讨论】:
为了回答这个问题,了解您使用的 DB2 版本和系统(LUW、z/OS、AS400 等)会很有帮助。 【参考方案1】:我不确定您在上面查看的是什么消息参考(它似乎是 iSeries?),但您最好通过here 访问 DB2 消息参考。
查找 SQL0206 会得到this page,并带有以下信息:
name 在使用它的上下文中无效。
SQLERRMC 是“O.METADATENSATZ”,所以我认为这意味着您已经向 DB2 发送了一条 SQL 语句,并且它报告“O.METADATENSATZ”无效......要么该列不存在,要么表“O”不存在。
正如message reference 所述,如果您想自动翻译 DB2 错误消息:
要调用消息帮助,请打开命令行处理器并输入:
? XXXnnnnn
其中 XXX 表示有效的消息前缀,nnnnn 表示有效的消息编号。
可以通过发出以下命令检索与给定 SQLSTATE 值关联的消息文本:
?嗯嗯
或
? nn
其中 nnnnn 是五位数的 SQLSTATE(字母数字),nn 是两位数的 SQLSTATE 类代码(SQLSTATE 值的前两位数)。
在您的情况下,在 DB2 CLP 中键入“?SQL0206”会得到错误消息。
【讨论】:
【参考方案2】:我发现了一个提示here:
retrieveMessagesFromServerOnGetMessage:
指定 JDBC SQLException.getMessage 调用是否会导致 IBM DB2 Driver for JDBC and SQLJ 调用用于检索错误消息文本的 DB2 for z/OS 存储过程。此属性的数据类型是布尔值。默认为 false,表示不将完整的消息文本返回给客户端。
我试过了,但是sqlException.getMessage()
的输出只变成了
O.METADATENSATZ
周围没有任何消息文本。
现在我找到了this:
在您可以在 DB2® for z/OS® 子系统上使用 IBM® Data Server Driver for JDBC and SQLJ 的某些功能之前,您需要安装一组存储过程并创建一组表。
...
WLM 必须安装在 z/OS 系统上。
WLM 是 DB2 Workload Manager,不适用于我用于开发的 DB2 Express 版本:-(
【讨论】:
以上是关于如何从 DB2 获取描述性错误消息?的主要内容,如果未能解决你的问题,请参考以下文章