【发布时间】:2012-07-24 16:18:22
【问题描述】:
我正在尝试使用 odbc 动态创建一个表,我需要获取正确的类型字符串以在 create table 语句中使用。但是,似乎无法从 Oracle 驱动程序 (oracle-instantclient11.2-odbc-11.2.0.1.0-1.x86_64) 中获取任何 TYPE_NAME 字符串。 使用以下类型调用 SQLGetTypeInfo(hStmt, sqlType) 总是返回一个空记录:
SQL_NUMERIC、SQL_INTEGER、SQL_BIGINT
我期待的分别是 NUMERIC、NUMERIC(10,0) 和 NUMERIC(19,0)。或 NUMBER 替换 http://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm#i16209 中列出的数字:NUMBER(p,s)
相反,SQL_ALL_TYPES 列表显示根本不支持 NUMBER,而是有一个未记录的(对于上述链接)DECIMAL 类型。
知道为什么会出现这种行为以及如何在无需检查驱动程序连接 DBMS 名称的情况下获取正确的字符串吗?
PS: SQL_ALL_TYPES 返回: BLOB、LONG RAW、BFILE、RAW、CLOB、LONG、CHAR、DECIMAL、BINARY_FLOAT、 BINARY_DOUBLE、双精度、日期、VARCHAR2、NCHAR、NVARCHAR2、NCLOB
【问题讨论】:
-
你试过 SQL_ALL_TYPES 看看它支持什么?
-
根据 SQL_ALL_TYPES 输出似乎根本不支持 NUMBER 类型(我已经在上面编辑过)
-
尝试将 SQL_DECIMAL 传递给 SQLGetTypeInfo。请参阅the ODBC docs,特别是附录 D。分享和享受。
标签: oracle odbc oracle11g unixodbc