Stored procedures 无法在db2的SQL PL存储过程中更改表(添加唯一约束)

Stored procedures 无法在db2的SQL PL存储过程中更改表(添加唯一约束),stored-procedures,db2,alter-table,sql-pl,Stored Procedures,Db2,Alter Table,Sql Pl,我正在尝试用SQL PL为db2创建一个存储过程。需要添加一个新字段作为唯一密钥的一部分,因此我需要先删除以前的uk,然后添加新的唯一密钥。这对mssqlserver和Oracle来说效果很好,但我无法在db2中实现 CREATE PROCEDURE update_unique_key () LANGUAGE SQL BEGIN DECLARE uk_constraint_name VARCHAR(50); DECLARE sql_stmt VARCHAR(100);

我正在尝试用SQL PL为db2创建一个存储过程。需要添加一个新字段作为唯一密钥的一部分,因此我需要先删除以前的uk,然后添加新的唯一密钥。这对mssqlserver和Oracle来说效果很好,但我无法在db2中实现

CREATE PROCEDURE update_unique_key ()
LANGUAGE SQL
BEGIN 
    DECLARE uk_constraint_name VARCHAR(50);
    DECLARE sql_stmt VARCHAR(100);  
    SELECT constname INTO uk_constraint_name FROM SYSCAT.TABCONST WHERE tabname = 'TABLE_NAME' AND type = 'U';
    SET sql_stmt = 'alter table TABLE_NAME drop constraint ' || char(uk_constraint_name);
    SET sql_stmt_2 = 'alter table TABLE_NAME add unique (F1, F2)';  

    prepare s1 from sql_stmt;
    prepare s2 from sql_stmt_2;

    EXECUTE IMMEDIATE s1;   
    EXECUTE IMMEDIATE s2;       
END
当试图以IBMDataStudio作为客户端部署例程时出现此错误,数据库是DB29.5

    DEV.UPDATE_UNIQUE_KEY - Deploy started.
Create stored procedure returns SQLCODE: -206, SQLSTATE: 42703.
DEV.UPDATE_UNIQUE_KEY: 8: "SQL_STMT_2" is not valid in the context where it is used.. SQLCODE=-206, SQLSTATE=42703, DRIVER=4.12.55
"SQL_STMT_2" is not valid in the context where it is used.. SQLCODE=-206, SQLSTATE=42703, DRIVER=4.12.55
我不明白的是: -如果在例行程序中,我只是放弃约束,它会工作。 -我可以添加约束,只需从sql客户机Squirrel执行alter表 -如果我有一个例程试图添加约束,我会得到同样的错误


谢谢你的帮助。谢谢

我只是忘了声明变量。。。声明sql_stmt_2 VARCHAR100

我只是忘了声明变量。。。声明sql_stmt_2 VARCHAR100;你是说这回答了你的问题?如果是,请随时将其作为答案发布,以便其他人可以看到问题已得到回答。谢谢