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;
个
我不知道两个游标声明语句有什么区别有人知道吗?提前感谢
1条答案
按热度按时间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。