我通过本机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可以显示的内容?
答案 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是空字符串。我不太确定那里发生了什么。