我有大量的INSERT语句要运行。当我运行它们时,我理解地获得了“超出最大游标数”。尝试关闭时光标状态无效
OK Oracle,所以我将在运行INSERT语句后立即关闭游标。
SQLCloseCursor(hStmt)
但是Oracle对此表示“无效的游标状态”。
为什么Oracle不满意我关闭游标?我通过MySQL dsn测试了这种相同类型的查询,MySQL似乎没有抱怨在INSERT语句后立即关闭游标。
编辑 -
下面是执行查询
检查是检查的SQLRESULT和记录错误的函数代码,如果任何返回TRUE如果成功,FALSE如果失败。 “status()”使用SQLGetDiagRec()记录其余的错误信息。
SQLINTEGER nonquery(char * nonquery) { SQLINTEGER rowsAffected = 0 ; SQLHANDLE hStmt ; CHECK(SQLAllocHandle(SQL_HANDLE_STMT, hConn, &hStmt), "allocate handle for statement") ; if(!CHECK(SQLExecDirectA(hStmt, (SQLCHAR*)nonquery, SQL_NTS), "execute query")) { status(SQL_HANDLE_STMT, hStmt, __LINE__) ; } // Get rows affected if(!CHECK(SQLRowCount(hStmt, &rowsAffected), "row count after non-query")) { status(SQL_HANDLE_STMT, hStmt, __LINE__) ; } if(! CHECK(SQLFreeStmt(hStmt, SQL_CLOSE), "Sql free stmt")) { status(SQL_HANDLE_STMT, hStmt, __LINE__) ; } // CLose up. if(!CHECK(SQLCloseCursor(hStmt), "close cursor")) { status(SQL_HANDLE_STMT, hStmt, __LINE__) ; } return rowsAffected ; }
我打电话nonquery像这样
nonquery("sql statement") ;
所以我得到:(?这可能是由于INSERT语句没有光标)
[24000][0] [Oracle][ODBC]Invalid cursor state.
起初,后来,在许多插入(非查询简单地称为许多,连续多次)后,我得到
ORA-01000: maximum open cursors exceeded
http://dev.mysql.com/doc/refman/5.1/en/connector-odbc-versions.html说MySQL驱动是“1级和2级“。 我相信我的oracle驱动程序必须是ODBC 2 http://www.oracle.com/technology/software/tech/windows/odbc/index.html 我认为这是有道理的,插入语句不应该有一个游标..但我仍然如何“超过最大游标”? – bobobobo 2009-07-18 19:06:42
MSDN说“无效光标”只能由3.0驱动程序返回。我会忘记MySQL并专注于甲骨文 - 你可以发布一个小例子来说明问题吗?您可能还想在更面向Oracle的网站上发布该问题,因为我的印象不是太多,所以常客使用它 - 恐怕我自己也不会。 – 2009-07-18 19:12:40