0
db2 용 SQL PL에 저장 프로 시저를 만들려고합니다. 새 필드를 고유 키의 일부로 추가해야하므로 먼저 이전 영국을 삭제 한 다음 새 고유 키를 추가해야합니다. 그것은 MS SQLServer와 오라클에서 잘 돌아 갔지만 DB2에서는 만들 수 없습니다.db2 용 SQL PL 저장 프로 시저에서 테이블 (고유 제한 추가)을 변경할 수 없음
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
(데이터베이스가 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
내가 이해하지 못하는 것은 클라이언트로 IBM 데이터 스튜디오와 루틴을 배포하려고이 오류를 얻는 것은입니다 :
-의 경우, 루틴을 그냥 제약 조건을 삭제합니다.
- SQL 클라이언트 (다람쥐)에서 alter table을 수행하는 제약 조건을 추가 할 수 있습니다.
- 제약 조건을 추가하려는 루틴이있는 경우 동일한 오류가 발생합니다.
감사합니다. 감사합니다
변수를 선언하는 것을 잊어 버렸습니다 ... DECLARE sql_stmt_2 VARCHAR (100); –
당신의 질문에 대한 답변을 말하고 있습니까? 그렇다면 다른 사람들이 질문에 답변을 볼 수 있도록 답변으로 게시 해 주시기 바랍니다. 감사. – brandong