DB2更新游标问题

5tmbdcev  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(277)

下面的游标有什么问题?它在oracle中运行良好,但在db2中出现错误“不允许使用FOR UPDATE子句,因为游标指定的表无法修改.. SQLCODE= -511,SQLSTATE=42829,“

CURSOR DED_CU(PCTYPE IN NUMBER) is
        SELECT D.something, D.something2,
               D.cid, D.used_something,D.type, crv.xrate,crv.xrate2
               FROM   xbx D, xvx  CRV
        WHERE  D.cid = CRV.CACHE_KEY
        AND    CRV.CACHE_VALUE1 = Declaredvariable1 AND CACHE_TYPE=Declaredvariable2
        AND    D.used_something  > 0
        AND    D.type   = Declaredvariable3
        ORDER BY D.something2, D.something
        FOR UPDATE OF used_something;

我在一个存储过程中使用游标。我是DB2新手。

kiayqfof

kiayqfof1#

您是否查看了错误消息?
在数据库管理员上,如果数据指标是以VALUES陈述式为基础,或SELECT陈述式包含下列任何一项,则结果数据表是只读的:

  • DISTINCT关键字
  • SELECT列表中的列函数
  • GROUP BY或HAVING子句
  • 标识以下内容之一的FROM子句:
    • 多个表或视图
    • 只读视图
    • 具有类型化表或类型化视图的OUTER子句
    • 数据更改语句
  • 集合运算符(UNION ALL除外)。

Db2遵循SQL标准,您不能更新连接的表。您将需要如下内容:

CURSOR DED_CU(PCTYPE IN NUMBER) is
    SELECT D.something, D.something2,
           D.cid, D.used_something,D.type
           FROM   xbx D
    WHERE  D.cid in (select CRV.CACHE_KEY
                     from xvx CRV
                     where CRV.CACHE_VALUE1 = Declaredvariable1 
                       AND CACHE_TYPE=Declaredvariable2
                     )
    AND    D.used_something  > 0
    AND    D.type   = Declaredvariable3
    ORDER BY D.something2, D.something
    FOR UPDATE OF used_something;

相关问题