使用来自C Application的db2 CLI / ODBC连接更新表错误?

问题描述 投票:-1回答:1

从通过DB2 CLI / ODBC驱动程序连接的C应用程序更新远程数据库时出错。

使用UPDATE语句的函数SQLExecute发生错误(返回-1)。

SQLSTATE:42828,本机错误代码:4294966786,[IBM] [CLI驱动程序] [DB2 / AIX64] SQL0510N不允许对指定的游标进行UPDATE或DELETE。 SQLSTATE = 42828

谢谢,穆罕默德沙姆沙德

c db2 db2-luw
1个回答
0
投票

编程错误。更多信息,请访问以下链接。 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子句。

© www.soinside.com 2019 - 2024. All rights reserved.