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

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

我正在尝试使用 DB2 在 AIX 上编译 .sqc 文件 出现 sql 错误 SQL0511N “不允许使用 FOR UPDATE 子句,因为无法修改游标指定的表。SQLSTATE=42829” 在“FETCH FIRST :host_variable_int ROWS ONLY”上使用 host_variable_int 声明游标时,但相同的语句是当传递 number 而不是 host_variable 时进行编译,如“FETCH FIRST 40 ROWS ONLY”。 错误 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 **:host_variable_int** ROWS ONLY FOR UPDATE OF coulmn_name;
无错误 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;

我不确定这两个游标声明语句有什么区别 有人对此有任何想法吗? 预先感谢

compiler-errors db2 aix proc
1个回答
0
投票

对于 Db2 的当前版本,这是预期结果。您不能将主机变量用于

fetch first
行计数。

在 Db2 中,根据 documentation,fetch-clause 对于 fetch-row-count 有这种语法。

获取行数 指定要检索的最大行数的表达式。表达式不得包含列引用、 scalar-fullselect,一个非确定性的函数,一个函数 具有外部操作或序列引用 (SQLSTATE 428H7)。 该数值必须是正数或零 (SQLSTATE 2201W)。 如果表达式的数据类型不是 BIGINT,则结果 表达式被转换为 BIGINT 值。当省略 fetch-row-count 时, 它相当于 1。

如果你想改变获取的第一个值,你必须使用动态SQL,而不能使用静态SQL。

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