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
운영게시판
최근게시물
Oracle Q&A 38809 게시물 읽기
No. 38809
plsql에서 select한 결과를 insert or update 할때
작성자
nob
작성일
2011-08-22 14:29
조회수
5,487

 원장테이블에서 집계테이블로 statement level 트리거를 사용해서 insert or update를 할 경우에 대한 부분을 작성하고 있는데요..

원장테이블에서 group by 해서 일별단위(일별로 여러개생성가능)로 집계테이블로 옮기는 로직을 작성할때 다음과 같은 식으로 작성하면 되는지 궁금합니다.

 

1. 원장테이블에서 일자별등으로 group by 한 결과를 참조하는 cursor 생성

2. for in loop를 사용해서 집계테이블에 insert를 하고 DUP_VAL_ON_INDEX 가 발생했을때 update 하는식으로 처리

3. 다시 for in loop를 사용해서 원장테이블에서 집계테이블로 반영한 데이터에 대해서 flag update

 

for 리스트 in cursor 명

loop

begin

insert into 집계테이블

exception

WHEN DUP_VAL_ON_INDEX THEN

update 집계테이블

end;

end loop;

for 리스트 in cursor 명

loop

update 원장테이블  

end loop;

 

위와같이 작성했는데 저렇게 해도 되는지 아니면 한건식 fetch 해서 처리하는 것이 맞는지 궁금하구요.

맨 마지막에 원장테이블을 update하기 위해서 for in loop를 다시한번 수행했는데 한번에 처리하는 방법이 있는지 궁금합니다.

감사합니다.

이 글에 대한 댓글이 총 1건 있습니다.

가능은 하겠지만... 추천하고 싶지 않네요.

입력시 부하가 너무 큰 방법입니다.

입력할때마다 (전체스캔, 그룹바이, 반복처리)과정이 반복되겠지요.

실행횟수가 적고 반응속도가 크게 문제되지 않는 배치작업이라면 고려해 볼수도 있겠지만.

그렇다 하더라도 어차피 배치이니 굳이 트리거를 안쓰고 단계별로 수행해도 되구요.

배치가 아닌 온라인에서 자주 입력되는 테이블이라면 아주 치명적입니다.

한건 입력할때마다 엄청난 부하가 발생하겠지요.

트리거보다는 일배치작업이나 MVIEW를 이용하시는것이 나을것 같습니다.

마농(manon94)님이 2011-08-23 08:38에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
38814MERGE INTO DBLINK 사용~ [2]
주하파파
2011-08-23
7149
38813TIMESTAMP 필드 검색 속도 향상 [2]
레이첼
2011-08-23
6995
38811초보자입니다.쿼리문 속도가 너무 안나와서요... [3]
염정훈
2011-08-23
5607
38809plsql에서 select한 결과를 insert or update 할때 [1]
nob
2011-08-22
5487
38808proc에서 오라클 접속후 core dump 발생
초보디비
2011-08-22
4423
38807DELETE/INSERT 시간이 너무 오래 걸립니다 [2]
신동민
2011-08-22
4960
38803데이터 수정 시 이상한 문자로 들어가는 문제 [4]
바램
2011-08-19
3951
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다