使用DB2数据库编译pro*c代码时,SQLSTATE=42829

p8h8hvxi  于 12个月前  发布在  DB2
关注(0)|答案(1)|浏览(199)

I am trying to compile a .sqc file on AIX using DB2 getting sql errorSQL0511N“The FOR UPDATE clause is not allowed because the table specified by the cursor cannot be modified.SQLSTATE=42829”while declaring a Cursor with host_variable_int on“FETCH FIRST:host_variable_intROWS ONLY”but the same statement is getting compiled when pass number instead of host_variable like“FETCH FIRST40ROWS ONLY”.

SQL语句错误:

第一个月

非错误SQL语句:

EXEC SQL DECLARE cursor_name CURSOR WITH HOLD FOR SELECT a.coulmn_names FROM TABLE_NAME a WHERE a.TABLE_COLUMN_1 = :host_variable AND a.TABLE_COLUMN_2 IN ( SELECT b.coulmn_names FROM TABLE_NAME b WHERE b.TABLE_COLUMN_1 = :host_variable AND a.TABLE_COLUMN_3 = b.TABLE_COLUMN_3) FETCH FIRST **40** ROWS ONLY FOR UPDATE OF coulmn_name;
我不知道两个游标声明语句有什么区别有人知道吗?提前感谢

uqcuzwp8

uqcuzwp81#

对于当前版本的Db2,这是预期结果。您不能使用host-variable作为fetch first行计数。
在Db2中,根据documentation,fetch-clause具有用于fetch-row-count的语法。
fetch-row-count指定要检索的最大行数的表达式。该表达式不能包含列引用、标量全选择、非确定性函数、具有外部操作的函数或序列引用(SQLSTATE 428 H7)。数值必须为正数或零(SQLSTATE 2201 W)。如果表达式的数据类型不是BIGINT,则表达式的结果将转换为BIGINT值。当省略fetch-row-count时,它等效于1。
如果你想改变fetch first的值,你必须使用dynamic-SQL,而不能使用static-SQL。

相关问题