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 1126 게시물 읽기
No. 1126
질문 DB2 procedure...
작성자
정재열(din102)
작성일
2006-10-16 13:32ⓒ
2006-10-16 13:33ⓜ
조회수
9,854

CREATE PROCEDURE iterator()

LANGUAGE SQL

BEGIN

   DECLARE SQLSTATE CHAR(5);

   DECLARE v_dept CHAR(3);

   DECLARE v_deptname VARCHAR(29);

   DECLARE v_admdept CHAR(3);

   DECLARE at_end INT DEFAULT 0;

   DECLARE not_found CONDITION FOR SQLSTATE '02000';

   DECLARE c1 CURSOR FOR

     SELECT deptno, deptname, admrdept

     FROM department

     ORDER BY deptno;

   DECLARE CONTINUE HANDLER FOR not_found

     SET at_end = 1;

   OPEN c1;

   ins_loop:

   LOOP

     FETCH c1 INTO v_dept, v_deptname, v_admdept;

     IF at_end = 1 THEN

       LEAVE ins_loop;

     ELSEIF v_dept = 'D11' THEN

       ITERATE ins_loop;

     END IF;

     INSERT INTO department (deptno, deptname, admrdept)

       VALUES ('NEW', v_deptname, v_admdept);

   END LOOP;

   CLOSE c1;

END @


not_found 관련 흐름에 대해 설명부탁드립니다.  

   DECLARE not_found CONDITION FOR SQLSTATE '02000';


   DECLARE CONTINUE HANDLER FOR not_found

     SET at_end = 1;


   ins_loop:

   LOOP

     FETCH c1 INTO v_dept, v_deptname, v_admdept;

     IF at_end = 1 THEN

       LEAVE ins_loop;

     ELSEIF v_dept = 'D11' THEN

       ITERATE ins_loop;

     END IF;


위의 코드에 대한 역할에 대해 구체적으로 알고 싶습니다.

이 글에 대한 댓글이 총 1건 있습니다.
   DECLARE not_found CONDITION FOR SQLSTATE '02000';
   DECLARE CONTINUE HANDLER FOR not_found
     SET at_end = 1;
-->  데이터가 없으면 at_end를 1로 

   ins_loop:
   LOOP
     FETCH c1 INTO v_dept, v_deptname, v_admdept;
     IF at_end = 1 THEN
       LEAVE ins_loop;
  --> 데이터가 없으면 loop 종료 
     ELSEIF v_dept = 'D11' THEN
       ITERATE ins_loop;
  --> v_dept가 D11이면 처음으로
     END IF;




db2 "? 02000"

SQLSTATE 02000: 다음 예외 중 하나가 발생했습니다. SELECT INTO문 또는
INSERT문의 부속선택의 결과가 빈 테이블이었습니다. 탐색한 UPDATE 또는
DELETE문에서 식별된 행 수가 0이었습니다. FETCH문에서 참조된 커서의 위치가 결과
테이블의 마지막 행 다음입니다.

Conditions
DB2에는 세 가지의 일반 조건이 있습니다.
NOT FOUND
SQLCODE가 +100 또는 SQLSTATE가 '02' 문자로 시작하는 모든 조건을 식별합니다.
SQLEXCEPTION
음수값의 SQLCODE를 초래하는 모든 조건을 식별합니다.
SQLWARNING
경고 조건(SQLWARN0가 'W'라는) 또는 +100이 아닌 양수값의 SQL 리턴 코드를 초래하는 모든 조건을 식별합니다. 대응하는 SQLSTATE의 값은 '01' 문자로 시작됩니다.
DECLARE문을 사용하여 특정 SQLSTATE에 대해 사용자 고유의 조건을 정의할 수도 있습니다.
도님이 2006-10-16 14:09에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1129로그인할때 db2admin이 아닌 다른 계정으로 사용되도록. [7]
J
2006-10-17
10697
1128AND 와 || 차이점 [1]
아추워
2006-10-16
7258
1127어플리케이션에서 DB서버에 접근 하던 중 에러가 발생 합니다.ㅠㅠ [1]
LoverDB
2006-10-16
8043
1126질문 DB2 procedure... [1]
정재열
2006-10-16
9854
1125db2 스키마 얻어오는 방법좀... [1]
김정열
2006-10-14
6920
1124db2 - iserise(as/400) V5 [1]
하면된다
2006-10-14
6651
1123tablespace 의 증가량을 syscat.tablespaces에서 볼 수 있나요. [1]
db2man
2006-10-13
7035
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다