如何通过JDBC显示Informix sysprocedures.paramtypes列?

时间:2013-02-01 08:27:43

标签: jdbc informix

我通过本机JDBC驱动程序执行SQL查询时遇到问题。我的程序使用此查询来生成Informix数据库模式:http://code.activestate.com/recipes/576621-dump-informix-schema-to-text/

SELECT procname, numargs, isproc, paramtypes, variant, handlesnulls, parallelizable
FROM sysprocedures
WHERE internal='f' AND mode IN ('D', 'd', 'O', 'o')
ORDER BY procname, numargs, procid

当我使用ODBC时它可以工作,但是这个程序可以由Jython和JDBC运行,而在JDBC中我得到了异常:

Dla tego typu danych jest wymagana dostosowana mapa typów. [SQLCode: -79769], [SQLState: IX000]

英文翻译(我讨厌用本地语言编写JDBC错误,只会在网络中搜索解决方案时遇到麻烦):

-79769 A customized type map is required for this data type
Explanation: You must register a customized type map to use any opaque types.

我也尝试过:

SELECT * FROM sysprocedures

但这在JDBC中也不起作用。

我发现paramtypes是个问题:如果删除它,查询就会起作用。

我必须注册什么才能将此列映射到JDBC可以显示的内容?

1 个答案:

答案 0 :(得分:1)

paramtypes列是一个复杂的列类型,使用Informix的一些可扩展性功能创建。我怀疑ODBC驱动程序通过以下方式解决它:

SELECT procname, numargs, isproc, paramtypes::LVARCHAR, variant, handlesnulls, parallelizable
  FROM sysprocedures
 WHERE internal = 'f' AND mode IN ('D', 'd', 'O', 'o')
 ORDER BY procname, numargs, procid

也就是说,它会强制转换为字符串。当我运行查询(在我的SQLCMD中)时,我得到输出,但很多procnames是空字符串。我不太确定那里发生了什么。