1

我在通过本机 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 可以显示的内容?

4

2 回答 2

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 是空字符串。我不太确定那里发生了什么。

于 2013-02-01T19:21:44.120 回答
0

与其使用参数类型的非规范化版本,不如加入

SELECT p.*, c.*, informix.schema_coltypename(c.paramtype, c.paramxid)
FROM sysprocedures p
JOIN sysproccolumns c ON p.procid = c.procid
WHERE p.internal='f' AND p.mode IN ('D', 'd', 'O', 'o')
ORDER BY p.procname, p.numargs, p.procid, c.paramid
于 2021-12-10T08:51:15.227 回答