[Oracle] Procedure 예외처리 (SQLCODE, SQLERM)
SQLCODE, SQLERRM
- WHEN OTHERS문으로 트랩(Trap) 되는 오류들의 실제 오류 코드와 설명을 볼 때 사용한다
- SQLCODE : 실행된 프로그램이 성공적으로 종료하였을 때는 오류번호 0을 포함하며, 그렇지 못할 경우에는 해당 오류코드 번호를 포함한다.
- SQLERRM : SQLCODE에 포함된 오라클 오류 번호에 해당하는 메시지를 가진다
SQLCODE Value |
Description |
0 |
오류 없이 성공적으로 종료 |
1 |
사용자 정의 예외 번호 |
+100 |
DATA NOT FOUND 예외 번호 |
음수 |
위의 부분을 제외한 오라클 서버 에러 번호 |
================================================
* Oracle Community OracleClub.com
* http://www.oracleclub.com
* http://www.oramaster.net
* 운영자 : 김정식 (oramaster _at_ empal.com)
================================================
'Database / Sql' 카테고리의 다른 글
[Oracle] MERGE INTO (0) | 2015.01.12 |
---|---|
[Oracle] 16진수 <-> 10진수 변환 (0) | 2014.09.18 |
[Oracle] IO를 많이 발생시키는 쿼리 찾기 (0) | 2014.09.02 |
[Oracle] 각 테이블/인덱스 사이즈 조회 쿼리 (0) | 2014.03.06 |
[Oracle] 테이블 스페이스 용량/사용량 산출 (0) | 2014.03.04 |
[Oracle] MERGE INTO
◆ MERGE INTO 구문
- MERGE문은 조건에 따라서 데이터의 삽입,갱신,삭제 작업을 한번에 할 수 있다.
- 해당 행이 존재하는 경우 UPDATE(DELETE포함 할 수 있음)를 수행하고, 새로운 행일경우 INSERT를 수행한다.
- 대상 테이블에 대한 UPDATE/INSERT 조건은 ON절에 의해 결정된다.
- MERGE문에서 CLOB 사용시 업데이트 할 내용이 2000bytes가 넘을때 ORA-00600 오류가 발생하며, patch set 11.2.0.2 버전으로 해결할 수 있다.
◆ 문법
MERGE INTO 테이블 a -- update또는 insert할 테이블
USING 대상테이블/뷰 b -- 비교대상 (동일 테이블이라면 using dual 사용)
ON (조건) -- a와 b의 조인식
WHEN MATCHED THEN
UPDATE SET
컬럼1 = 값1
컬럼2 = 값2
DELETE WHERE (조건)
WHEN NOT MATCHED THEN
INSERT(컬럼1, 컬럼2...)
VALUES(값1, 값2...)
- INTO : DATA가 UPDATE되거나 INSERT 될 테이블 또는 뷰를 지정.
- USING : 비교할 SOURCE 테이블 또는 뷰나 서브쿼리를 지정, INTO절의 테이블과 동일하거나 다를 수 있다.
- ON : UPDATE나 INSERT를 하게 될 조건으로, 해당 조건을 만족하는 DATA가 있으면 WHEN MATCHED 절을 실행하게 되고, 없으면 WHEN NOT MATCHED 이하를 실행하게 된다.
- WHEN MATCHED : ON 조건절이 TRUE인 ROW에 수행 할 내용 (UPDATE, DELETE포함 될 수 있음)
- WHEN NOT MATCHED : ON 조건절에 맞는 ROW가 없을 때 수행할 내용 (INSERT)
※ 오라클 9버전이상에서 사용가능하다.
◆ SAMPLE
MERGE INTO STO_TEMP1 T1
USING (SELECT EBELN, EBELP
FROM STO_TEMP
WHERE EBELN = '4501134859' AND EBELP = '00010') T
ON (T1.EBELN = T.EBELN AND T1.EBELP = T.EBELP)
WHEN MATCHED
THEN
UPDATE SET T1.MBLNR = T.MBLNR, T1.BUDAT = T.BUDAT
DELETE
WHERE T1.MBLNR = '4926768928'
WHEN NOT MATCHED
THEN
INSERT (T1.EBELN,
T1.EBELP,
T1.MBLNR,
T1.BUDAT)
VALUES (T.EBELN,
T.EBELP,
T.MBLNR,
T.BUDAT)
'Database / Sql' 카테고리의 다른 글
[Oracle] Procedure 예외처리 (SQLCODE, SQLERM) (0) | 2015.05.26 |
---|---|
[Oracle] 16진수 <-> 10진수 변환 (0) | 2014.09.18 |
[Oracle] IO를 많이 발생시키는 쿼리 찾기 (0) | 2014.09.02 |
[Oracle] 각 테이블/인덱스 사이즈 조회 쿼리 (0) | 2014.03.06 |
[Oracle] 테이블 스페이스 용량/사용량 산출 (0) | 2014.03.04 |
[Oracle] 16진수 <-> 10진수 변환
1. 16진수 -> 10진수
SELECT TO_CHAR(15,'0X'), TO_CHAR(16,'0X'), TO_CHAR(17,'0X')
FROM DUAL;
>> OF 10 11
SELECT TO_CHAR(15,'000X'), TO_CHAR(16,'000X'), TO_CHAR(17,'000X')
FROM DUAL;
2. 10진수 -> 16진수
SELECT TO_NUMBER('F', 'XX'), TO_NUMBER('10', 'XX'), TO_NUMBER('11', 'XX')
FROM DUAL;
>> 15 16 17
'Database / Sql' 카테고리의 다른 글
[Oracle] Procedure 예외처리 (SQLCODE, SQLERM) (0) | 2015.05.26 |
---|---|
[Oracle] MERGE INTO (0) | 2015.01.12 |
[Oracle] IO를 많이 발생시키는 쿼리 찾기 (0) | 2014.09.02 |
[Oracle] 각 테이블/인덱스 사이즈 조회 쿼리 (0) | 2014.03.06 |
[Oracle] 테이블 스페이스 용량/사용량 산출 (0) | 2014.03.04 |