안녕하세요?
파워빌더에 DB2 에 있는 Stored Procedure를 호출할려고 합니다.
호출은 잘 되는데, 마지막 인자로 실제 수행 결과코드값을 저장하도록
했는데..파워빌더에서는 그 값을 받지 못합니다..왜 그럴까요?
Stored Procedure는 아래와 같고
---------------------------------------------------------------------------------------------------------------------------------------------------------------
SET SCHEMA = "MIG";
CREATE PROCEDURE "MIG"."SP_VERIFY_AS_IS_ID" (
IN "P_TABLE_ID" VARCHAR(255),
IN "P_검증항목ID" INTEGER,
OUT "P_RESULT" INTEGER )
SPECIFIC "SQL090414113218700"
LANGUAGE SQL
NOT DETERMINISTIC
EXTERNAL ACTION
MODIFIES SQL DATA
CALLED ON NULL INPUT
INHERIT SPECIAL REGISTERS
BEGIN
DECLARE c_TB_ID VARCHAR(255);
DECLARE c_VFY_ID INT DEFAULT 0;
DECLARE v_전환차수 INT;
DECLARE v_SQL VARCHAR(4000);
DECLARE v_STMT STATEMENT;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
UPDATE MIG."검증항목정의"
SET 사용여부 = 'X'
WHERE
TB_테이블ID = c_TB_ID
AND 검증항목ID = c_VFY_ID;
SET P_Result = 1;
END;
SET P_Result = 0;
-- 전환차수 결정
SELECT MAX(전환차수ID)
INTO v_전환차수
FROM MIG."전환차수";
-- 검증결과초기화
DELETE FROM MIG."전환검증수행결과"
WHERE
전환차수ID = v_전환차수
AND 전환구분 = 'ASIS'
AND TB_테이블ID = p_TABLE_ID
AND 검증항목ID = p_검증항목ID;
-- 업무영역 내의 모든 테이블에 대한 테이블 루프 생성
FOR VERIFY_LIST_LOOP AS
SELECT
RTRIM(B."TB_테이블ID") AS TB_테이블ID
, B."검증항목ID"
, B."검증구분"
, RTRIM(B."검증용ASIS쿼리") AS 검증용ASIS쿼리
FROM
MIG."검증항목정의" AS B
WHERE
B.TB_테이블ID = p_TABLE_ID
AND 검증항목ID = p_검증항목ID
AND B."사용여부" = 'Y'
DO
SET c_TB_ID = VERIFY_LIST_LOOP.TB_테이블ID;
SET c_VFY_ID = VERIFY_LIST_LOOP.검증항목ID;
IF VERIFY_LIST_LOOP.검증구분 <> '코드' THEN -- [검증구분]이 '코드'가 아닌경우
-- 1. 검증시작시간 표시
SET v_SQL = '';
SET v_SQL = v_SQL || 'INSERT INTO MIG."전환검증수행결과" ' || CHR(13);
SET v_SQL = v_SQL || '("전환차수ID", "TB_테이블ID", "전환구분", "코드인스턴스", "검증시작시간", "검증항목ID") ' || CHR(13);
SET v_SQL = v_SQL || 'VALUES (' || CHR(13);
SET v_SQL = v_SQL || CAST(v_전환차수 AS CHAR(2)) || CHR(13);
SET v_SQL = v_SQL || ', ''' || VERIFY_LIST_LOOP.TB_테이블ID ||'''' || CHR(13);
SET v_SQL = v_SQL || ', ''ASIS''' || CHR(13);
SET v_SQL = v_SQL || ', ''-N/A-''' || CHR(13);
SET v_SQL = v_SQL || ', CURRENT_TIMESTAMP ' || CHR(13);
SET v_SQL = v_SQL || ', ' || CAST(VERIFY_LIST_LOOP.검증항목ID AS CHAR(5)) ||')' || CHR(13);
PREPARE v_STMT FROM v_SQL;
EXECUTE v_STMT;
-- 2. 검증결과 업데이트
SET v_SQL = '';
SET v_SQL = v_SQL || 'UPDATE MIG."전환검증수행결과" ' || CHR(13);
SET v_SQL = v_SQL || 'SET' || CHR(13);
SET v_SQL = v_SQL || '검증결과 = ( ' || VERIFY_LIST_LOOP.검증용ASIS쿼리 || ') ' || CHR(13);
SET v_SQL = v_SQL || 'WHERE ' || CHR(13);
SET v_SQL = v_SQL || ' 전환차수ID = ' || CAST(v_전환차수 AS CHAR(2)) || CHR(13);
SET v_SQL = v_SQL || 'AND TB_테이블ID = ''' || VERIFY_LIST_LOOP.TB_테이블ID || '''' || CHR(13);
SET v_SQL = v_SQL || 'AND 검증항목ID = ' || CAST(VERIFY_LIST_LOOP.검증항목ID AS CHAR(5)) || CHR(13);
SET v_SQL = v_SQL || 'AND 전환구분 = ''ASIS''' || CHR(13);
SET v_SQL = v_SQL || 'AND 코드인스턴스 = ''-N/A-''' || CHR(13);
-- INSERT INTO MIG.TEST (TEST) VALUES (v_SQL);
PREPARE v_STMT FROM v_SQL;
EXECUTE v_STMT;
-- 3. 검증종료시간 업데이트
SET v_SQL = '';
SET v_SQL = v_SQL || 'UPDATE MIG."전환검증수행결과" ' || CHR(13);
SET v_SQL = v_SQL || 'SET' || CHR(13);
SET v_SQL = v_SQL || '검증종료시간 = CURRENT_TIMESTAMP' || CHR(13);
SET v_SQL = v_SQL || 'WHERE ' || CHR(13);
SET v_SQL = v_SQL || ' 전환차수ID = ' || CAST(v_전환차수 AS CHAR(2)) || CHR(13);
SET v_SQL = v_SQL || 'AND TB_테이블ID = ''' || VERIFY_LIST_LOOP.TB_테이블ID || '''' || CHR(13);
SET v_SQL = v_SQL || 'AND 검증항목ID = ' || CAST(VERIFY_LIST_LOOP.검증항목ID AS CHAR(5)) || CHR(13);
SET v_SQL = v_SQL || 'AND 전환구분 = ''ASIS''' || CHR(13);
SET v_SQL = v_SQL || 'AND 코드인스턴스 = ''-N/A-''' || CHR(13);
PREPARE v_STMT FROM v_SQL;
EXECUTE v_STMT;
ELSE -- [검증구분]이 '코드'인 경우
SET v_SQL = '';
SET v_SQL = v_SQL || 'INSERT INTO MIG."전환검증수행결과" ( ' || CHR(13);
SET v_SQL = v_SQL || ' "전환차수ID" ' || CHR(13);
SET v_SQL = v_SQL || ', "TB_테이블ID" ' || CHR(13);
SET v_SQL = v_SQL || ', "전환구분" ' || CHR(13);
SET v_SQL = v_SQL || ', "검증항목ID" ' || CHR(13);
SET v_SQL = v_SQL || ', "검증시작시간" ' || CHR(13);
SET v_SQL = v_SQL || ', "코드인스턴스" ' || CHR(13);
SET v_SQL = v_SQL || ', "검증결과" ) ' || CHR(13);
SET v_SQL = v_SQL || 'SELECT ' || CHR(13);
SET v_SQL = v_SQL || CAST(v_전환차수 AS CHAR(2)) || CHR(13);
SET v_SQL = v_SQL || ', ''' || VERIFY_LIST_LOOP.TB_테이블ID ||'''' || CHR(13);
SET v_SQL = v_SQL || ', ''ASIS''' || CHR(13);
SET v_SQL = v_SQL || ', ' || CAST(VERIFY_LIST_LOOP.검증항목ID AS CHAR(5)) || CHR(13);
SET v_SQL = v_SQL || ', CURRENT_TIMESTAMP ' || CHR(13);
SET v_SQL = v_SQL || ', ' || SUBSTR(VERIFY_LIST_LOOP.검증용ASIS쿼리, 7, LENGTH(VERIFY_LIST_LOOP.검증용ASIS쿼리)-7+1);
-- INSERT INTO MIG.TEST (TEST) VALUES (v_SQL);
PREPARE v_STMT FROM v_SQL;
EXECUTE v_STMT;
-- 3. 검증종료시간 업데이트
SET v_SQL = '';
SET v_SQL = v_SQL || 'UPDATE MIG."전환검증수행결과" ' || CHR(13);
SET v_SQL = v_SQL || 'SET' || CHR(13);
SET v_SQL = v_SQL || '검증종료시간 = CURRENT_TIMESTAMP' || CHR(13);
SET v_SQL = v_SQL || 'WHERE ' || CHR(13);
SET v_SQL = v_SQL || ' 전환차수ID = ' || CAST(v_전환차수 AS CHAR(2)) || CHR(13);
SET v_SQL = v_SQL || 'AND TB_테이블ID = ''' || VERIFY_LIST_LOOP.TB_테이블ID || '''' || CHR(13);
SET v_SQL = v_SQL || 'AND 검증항목ID = ' || CAST(VERIFY_LIST_LOOP.검증항목ID AS CHAR(5)) || CHR(13);
SET v_SQL = v_SQL || 'AND 전환구분 = ''ASIS''' || CHR(13);
PREPARE v_STMT FROM v_SQL;
EXECUTE v_STMT;
END IF;
END FOR;
COMMIT;
END;
GRANT EXECUTE ON PROCEDURE "MIG"."SP_VERIFY_AS_IS_ID"( VARCHAR(255), INTEGER, INTEGER ) TO USER "TSTREAM" WITH GRANT OPTION;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
파워빌더에서의 호출은 아래와 같이 했습니다(파워빌더는 7.03을 사용하고 있습니다.)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DECLARE SP_1 PROCEDURE FOR MIG.SP_VERIFY_AS_IS_ID (:ls_tb_id, :ll_item, :li_rtn) USING gt_lig;
EXECUTE SP_1;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
고수님들...도와주세요~~~
|