database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
ㆍDB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
DB2 Q&A 1852 게시물 읽기
No. 1852
파워빌더에서 DB2 Stored Procedure 호출 시 output parameter 받는 법
작성자
강민수
작성일
2009-04-19 16:42
조회수
11,834

안녕하세요?


파워빌더에 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;

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


고수님들...도와주세요~~~


[Top]
No.
제목
작성자
작성일
조회
2035테이블 삭제와 함수와의 관계
조성호
2009-05-25
9447
1854JbuilderX에서 DB2 JDBC 연결.
티파니
2009-04-22
10061
1853db2set 관련 문의드립니다.
권진섭
2009-04-20
9482
1852파워빌더에서 DB2 Stored Procedure 호출 시 output parameter 받는 법
강민수
2009-04-19
11834
1851Toad for DB2 4.0 시리얼
DB2
2009-04-17
11900
1850DB2 에서 라이브러리 관련 질문...
hs
2009-04-14
9393
1849DB2 데이타베이스 디렉토리 [1]
백봉현
2009-04-08
9920
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.061초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다