从通过DB2 CLI / ODBC驱动程序连接的C应用程序更新远程数据库时出错。
使用UPDATE语句的函数SQLExecute发生错误(返回-1)。
SQLSTATE:42828,本机错误代码:4294966786,[IBM] [CLI驱动程序] [DB2 / AIX64] SQL0510N不允许对指定的游标进行UPDATE或DELETE。 SQLSTATE = 42828
谢谢,穆罕默德沙姆沙德
编程错误。更多信息,请访问以下链接。 db2“?SQL0510N”
SQL0510N不允许对指定的游标进行UPDATE或DELETE。
说明:
程序试图针对不允许请求的更新或删除操作的表或视图定义执行UPDATE或DELETE WHERE CURRENT OF游标语句。例如,在从只读视图或未使用FOR UPDATE子句定义游标的更新中删除时,可能会发生此错误。
从提供的日志文件:
SQLPrepare(65537,SELECT * FROM SPAUTH WHERE TRMCAU =?AND PRFCAU =?AND LVL2AU =?ORDER BY TRMCAU ASC,PRFCAU ASC,LVL2AU ASC OPTIMIZE for 40 ROWS,SQL_NTS); SQLSetCursorName(65537,SPAUTHU); ... SQLPrepare(65539,UPDATE SPAUTH设置TRMCAU = ?, PRFCAU = ?, LVL2AU = ?, AUTHAU =?其中当前为SPAUTHU,SQL_NTS); SQLExecute(65539);
[错误] 0315-152416进程31244文件isp406000o / qcsrc / TestUpd1.c第1653行:SQLSTATE:42828,本机错误代码:4294966786,[IBM] [CLI驱动程序] [DB2 / AIX64] SQL0510N更新或删除不允许对指定的光标。 SQLSTATE = 42828
游标SPAUTHU不可更新,但您尝试针对它发出定位更新。 DECLARE CURSOR statement:
如果满足以下每个条件,则与游标关联的外部全查询的选择列表中的列是可更新的:
- 光标是可删除的 ...
如果满足以下每个条件,则可以删除游标: ...
- 外部fullselect不包含ORDER BY子句(即使ORDER BY子句嵌套在视图中),并且未指定FOR UPDATE子句
...
在FOR UPDATE
声明的末尾添加SELECT
子句。