在oracle中通过ODBC API 查询一列类型为 Interval day to second的数据时,调用 SQLBindCol接口时提示不支持该数据类型;我把该列类型绑定为varchar,调用SQLFetch接口直接崩溃。查了一些资料,Interval类型在Oracle 9i中就已经支持了,请问是要怎么设置,或者是ODBC版本太低了,怎么升级?谢谢。
解决方案 »
- ORACLE存储过程分页的问题
- pl/sql 如何自动导出某表的记录为CSV文件呢?
- oracle 索引维护时机?发现INSERT DELETE时候也
- extract执行出错,大家帮我看看
- [求助]如果查找表中某字段的值中包含0至9、-之外的字符?
- 菜鸟提问,关于oem登录。。。
- 关于oracle7.3升级到oracle8i时遇到了DEF$_CALLDEST,DEF$_ERROR,DEF$_DESTINATION出错!!
- 请教大家,怎么样把ORALCE的数据表导入到Access 数据库里面??
- 大侠,救命啊,sqlldr问题 分不够,可以再加
- 安装oracle9i至少需要512MB内存吗?oracle8i呢?
- oracle 11g如何实现自动备份数据?
- goldengate extract启动不起来。麻烦大神看一下
#include <sqltypes.h>
#include <sql.h>
#include <sqlext.h>
int main()
{
SQLHENV henv;
SQLHDBC hdbc;
SQLHSTMT hstmt;
SQLHDESC hAPDdesc;
SQLHDESC hARDdesc; SQLRETURN retcode; SQLCHAR OutConnStr[1024];
SQLSMALLINT OutConnStrLen;
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER*)SQL_OV_ODBC3, 0);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
retcode = SQLDriverConnect(
hdbc,
NULL,
(SQLCHAR*)"DRIVER={Oracle in OraClient11g_home1_32bit};SERVER=testoracle;UID=testoracle;PWD=123;DBQ=testoracle;",
SQL_NTS,
OutConnStr,
1024,
&OutConnStrLen,
SQL_DRIVER_NOPROMPT);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); retcode = SQLPrepare(hstmt, (SQLCHAR*)"select interval_column from TESTORACLE.DATATYPE_INTERVAL;", SQL_NTS);
retcode = SQLExecute(hstmt); SQLINTEGER desclen;
retcode = SQLGetStmtAttr(hstmt, SQL_ATTR_APP_ROW_DESC, &hARDdesc, SQL_IS_POINTER, &desclen);
retcode = SQLSetDescField(hARDdesc, 1, SQL_DESC_TYPE, (SQLPOINTER)SQL_INTERVAL, 0);
retcode = SQLSetDescField(hARDdesc, 1, SQL_DESC_CONCISE_TYPE, (SQLPOINTER)SQL_C_INTERVAL_DAY_TO_SECOND, SQL_IS_INTEGER); //返回-1
retcode = SQLSetDescField(hARDdesc, 1, SQL_DESC_DATETIME_INTERVAL_CODE, (SQLPOINTER)SQL_CODE_DAY_TO_SECOND, SQL_IS_INTEGER); //返回-1 // Bind
SQL_INTERVAL_STRUCT is;
SQLLEN cbValue;
retcode = SQLBindCol(hstmt, 1, SQL_C_INTERVAL_DAY_TO_SECOND, &is, sizeof(SQL_INTERVAL_STRUCT), &cbValue); //返回-1,错误信息:不支持该类型
// Fetch
retcode = SQLFetch(hstmt); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
}
SQLCancel(hstmt);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) {
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
}
SQLDisconnect(hdbc);
}
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
}
}
SQLFreeHandle(SQL_HANDLE_ENV, henv);
}
system("pause");
return 0;
}