我正在尝试在SQL PL中为db2创建一个存储过程。需要添加一个新字段作为唯一键的一部分,因此我需要先删除先前的uk,然后添加新的唯一键。这适用于MS SQLServer和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
尝试使用IBM Data Studio作为客户端部署例程时获取此错误(数据库为db2 9.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 table
- 如果我只是尝试添加约束的例程,我会得到相同的错误。
我感谢任何帮助。感谢
答案 0 :(得分:0)
我只是忘了声明变量...... DECLARE sql_stmt_2 VARCHAR(100);