Stored procedures DB2ALTER自动增量查询存储过程

Stored procedures DB2ALTER自动增量查询存储过程,stored-procedures,db2,Stored Procedures,Db2,我尝试使用DB2存储过程更改表。下面是我的代码。我在alterquery中发现了这个问题。但同样的查询在DB2命令行编辑器中完美地执行。我想使用存储过程运行相同的查询。请帮帮我 CREATE PROCEDURE MODIFYAUTOINCRE() SPECIFIC TEST RESULT SETS 1 MODIFIES SQL DATA LANGUAGE SQL ---------------------------------------------------

我尝试使用DB2存储过程更改表。下面是我的代码。我在alterquery中发现了这个问题。但同样的查询在DB2命令行编辑器中完美地执行。我想使用存储过程运行相同的查询。请帮帮我

CREATE PROCEDURE MODIFYAUTOINCRE()
    SPECIFIC TEST
    RESULT SETS 1
    MODIFIES SQL DATA
    LANGUAGE SQL
------------------------------------------------------------------------
-- SQL Stored Procedure 
------------------------------------------------------------------------
P1: BEGIN
    DECLARE v_max INTEGER DEFAULT 0;--
    DECLARE stmt1 VARCHAR(100);
    DECLARE stmt2 VARCHAR(100);
    DECLARE name1 VARCHAR(100);

    -- Declare cursor
    DECLARE cursor1 CURSOR WITH RETURN FOR

        SELECT MAX(LABEL_ID) FROM ESTORE.APPLICATION_LABELS;


    -- Cursor left open for client application
    OPEN cursor1;

        FETCH cursor1 INTO v_max;
    IF (v_max > 0 ) THEN

    SET v_max=v_max+1;

        SET stmt1= 'ALTER TABLE APTR.APPLICATION_LABELS ALTER COLUMN LABEL_ID SET GENERATED AS IDENTITY (START WITH '||v_max||' INCREMENT BY 1 NO CACHE);';

        PREPARE name1 FROM stmt1;

        EXECUTE IMMEDIATE name1;

        commit;
    END IF;


END P1
错误:
在“NTITY(以69开头)”之后发现意外的标记“END-OF-STATEMENT”。预期的标记可能包括:“)”。。SQLCODE=-104,SQLSTATE=42601,DRIVER=3.58.81

动态SQL语句不能包含语句终止符。从
stmt1

中删除尾随分号。过程本身没有问题,所有语法都是正确的(如果您谈论的是Linux、UNIX或Windows上当前版本的DB2),它将编译

但是,还有许多其他潜在错误:

  • 查询表
    ESTORE.APPLICATION\u标签
    ,然后更改
    APTR.APPLICATION\u标签

  • 当你改变表格时,你应该只使用
    altertable。。。更改列。。。用X重新启动,而不是试图更改整个生成的
    子句

  • 不确定在存储过程中使用游标时为什么要用return声明
    cursor1
    。对于这一点,我不知道你为什么要首先使用光标,当你可以从…
    SELECT max(label\u id)进入v\u max时。

  • 如果要执行立即执行,则无需准备语句。只需
    立即执行stmt1