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 41313 게시물 읽기
No. 41313
MERGE 질문
작성자
검콤이(검콤이)
작성일
2017-01-17 17:40
조회수
6,235

안녕하세요.

 

MERGE 구문을 쓰지않고 똑같은 PL/SQL 을 사용하여 뭐좀 테스트 중인데요

 

일단 아래 쿼리로 UPSERT를 합니다

begin

insert into t (mykey, mystuff)

values ('X', 123);

exception

when dup_val_on_index then

update t

set mystuff = 123

where mykey = 'X';

end;

/

 

제가 원하는 다른방법은

일단 INSERT 후에 값이 없으면 바로 COMMIT 일어나고,

값이 있다면, PK VIOLATION 에러가 발생하며, 롤백후

다시 업데이트가 되는 PL/SQL 을 원합니다.

혹시 도움좀 주실분 계신가요?

감사합니다.

 

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

다 작성하셨네요?
단일 작업이라면 에러 후 롤백은 필요 없구요.
커밋만 잘 적어주면 될 듯 하네요.
insert 와 update 두군데 모두 commit 하시면 됩니다.
개선할 점은 bigin ~ end 블럭을 중첩으로 사용하는 게 좋을 듯?


BEGIN
    BEGIN
        INSERT INTO t (mykey, mystuff)
        VALUES ('X', 123)
        ;
    EXCEPTION
        WHEN dup_val_on_index THEN
            UPDATE t
               SET mystuff = 123
             WHERE mykey   = 'X'
            ;
    END;
    COMMIT;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
END;
/

마농(manon94)님이 2017-01-18 11:06에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41316bitmap 컬럼을 빠르게 인덱스하는 방법 문의. 조건적 인덱스? [1]
앙마승재
2017-01-19
5915
4131510g ent -> 110g std 변경시 문제점(Parallel객체 등) 문의 [2]
앙마승재
2017-01-18
6181
41314오라클 쿼리 실행 취소시 [1]
이기락
2017-01-18
6295
41313MERGE 질문 [1]
검콤이
2017-01-17
6235
41310ORACLE관련 UNDO DATA 문의드립니다. 다른커뮤니티에서 [1]
박지훈
2017-01-10
6247
41309fucntion을 만들려고 하는데요... [4]
류호태
2017-01-09
6477
41308[쿼리 문의] 같은 키 다른 데이터가 있는 레코드만 뽑을 수 있을까요? [3]
MI
2017-01-08
5993
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다