2011-09-30 4 views
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을 수행하는 제약 조건을 추가 할 수 있습니다.
- 제약 조건을 추가하려는 루틴이있는 경우 동일한 오류가 발생합니다.

감사합니다. 감사합니다

+0

변수를 선언하는 것을 잊어 버렸습니다 ... DECLARE sql_stmt_2 VARCHAR (100); –

+0

당신의 질문에 대한 답변을 말하고 있습니까? 그렇다면 다른 사람들이 질문에 답변을 볼 수 있도록 답변으로 게시 해 주시기 바랍니다. 감사. – brandong

답변

0

그냥 변수를 선언하는 걸 깜빡 했네 ... DECLARE sql_stmt_2 VARCHAR (100);

관련 문제