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 1348 게시물 읽기
No. 1348
트리거 내에서 프로시져 사용방법...
작성자
김재호
작성일
2007-05-22 19:51
조회수
8,678

안녕하세요.


요즘 DB2 작업을 하게 되면서 이 사이트에 많이 접하게 되네요.


많은 도움이 되는 것 같습니다.


본론으로 들어가서 아래의 트리거 및 프로시져를 DB2 로 컨버젼하여 사용하고 싶은데요.


잘 되지가 않아 이렇게 질문드립니다.



INFORMIX> PROCEDURE


CREATE PROCEDURE get_maxidx(v_chtime DATE)

    RETURNING INT;

    DEFINE v_maxidx INT;

    

    SELECT nvl(max(chtime_idx), 0) + 1 INTO v_maxidx FROM changeinfo WHERE chtime = v_chtime;

    

    RETURN v_maxidx;

END PROCEDURE;


INFORMIX> TRIGGER


CREATE TRIGGER changeinfo_trigger

    INSERT ON changeinfo REFERENCING NEW AS new

    FOR EACH ROW (EXECUTE PROCEDURE get_maxidx(new.chtime) INTO chtime_idx);



위의 내용을 설명 드리면, changeinfo라는 테이블에 데이터가 삽입되면 삽입된 데이터(chtime_idx 컬럼을 제외한)와 함께 changeinfo 테이블 내에


chtime_idx(INT 형)라는 컬럼의 값을 이전 레코드의 chtime_idx + 1로 삽입하려는 것입니다.


즉, changeinfo 테이블 데이터가 아래와 같다면,


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

chdata                  | chtime_idx

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

a                            1

b                            2


"inser into changeinfo (chdata) values ('c');" 라고 데이터를 삽입하면 자동으로 트리거가 작동하여


아래와 같이 changeinfo 테이블에 데이터가 삽입됩니다.


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

chdata                  | chtime_idx

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

a                            1

b                            2

c                            3


위의 내용을 제 나름대로 DB2로 변경하려고 시도한 내용이 아래와 같습니다.


DB2> PROCEDURE


CREATE PROCEDURE get_maxidx(IN v_chtime DATE)

    DYNAMIC RESULT SETS 0

    LANGUAGE SQL

BEGIN

    DECLARE v_maxidx INT DEFAULT 0;


    SELECT COALESCE(MAX(chtime_idx), 0) + 1 INTO v_maxidx FROM changeinfo WHERE chtime = v_chtime;

    RETURN v_maxidx;

END


DB2> TRIGGER


CREATE TRIGGER changeinfo_trigger

    AFTER INSERT ON changeinfo REFERENCING NEW AS new

    FOR EACH ROW (CALL PROCEDURE get_maxidx(new.chtime) INTO chtime_idx);



위와 같이 변경하니 트리거 생성 시 오류가 나네요. 알고 계신 분들은 답변 부탁드립니다. ^^

[Top]
No.
제목
작성자
작성일
조회
1353IBM DB2 ODBC DRIVER구함
이상우
2007-05-25
8229
1350테이블공간 생성시 질문... 왕초보 ㅠ_ㅠ
KEH
2007-05-24
7406
1349union all 관련 [1]
pandora
2007-05-23
9035
1348트리거 내에서 프로시져 사용방법...
김재호
2007-05-22
8678
1347유닉스에서 백업한 것을 윈도우에서 restore 가능한가요? [1]
심현철
2007-05-21
7604
1346이 sql좀 봐주세요 오브젝트가 실제 별칭인지 확인하십시오 이런오류가나요.. [1]
이해준
2007-05-18
10437
1345다시한번 세션정보에 대해 질문드립니다. [3]
김재호
2007-05-18
10335
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.031초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다