레이블이 SQL힌트인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SQL힌트인 게시물을 표시합니다. 모든 게시물 표시

2021년 12월 11일 토요일

CHANGE_DUPKEY_ERROR_INDEX힌트, PK, UK 중복시 오라클 에러코드를 변경하는 힌트, 오라클힌트교육, SQL교육, 오라클학원동영상

 

CHANGE_DUPKEY_ERROR_INDEX힌트, PK, UK 중복시 오라클 에러코드를 변경하는 힌트, 오라클힌트교육, SQL교육, 오라클학원동영상


http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=325 


CHANGE_DUPKEY_ERROR_INDEX힌트, PK, UK 중복시 오라클 에러코드를 변경하는 힌트, 오라클힌트교육, SQL교

CHANGE_DUPKEY_ERROR_INDEX힌트, PK, UK 중복시 오라클 에러코드를 변경하는 힌트, 오라클힌트교육, SQL교육ORACLE HINTPK, UK 중복시 오라클 에러코드를 변경하는 힌트 (CHANGE_DUPKEY_ERROR_INDEX)실습 : 오라클19C 오

ojc.asia


https://youtu.be/Wy7m6DZEoSQ

https://www.youtube.com/watch?v=32YaMykHAbc&list=PLxU-iZCqT52Dlz0zGgFiq1mBz21arFUHS&index=34 


ORACLE HINT


PK, UK 중복시 오라클 에러코드를 변경하는 힌트 (CHANGE_DUPKEY_ERROR_INDEX)



실습 : 오라클19C         



오라클의 Online Application Upgrade를 위한 힌트는 INSERT 또는 UPDATE시 키 중복의 경우에 대응하기 위한 힌트이다. 먼저 CHANGE_DUPKEY_ERROR_INDEX에 대해 알아보자.


CHANGE_DUPKEY_ERROR_INDEX 힌트구문은 Oracle11g R2에서 새롭게 제시한 힌트구문으로 힌트에서 인자로 기술한 칼럼에 대해 키 중복 에러가 발생할 경우 "ORA-00001: unique constraint (XXX.YYY) violated" 대신에 "ORA-38911: unique constraint (XXX.YYY) violated"를 보여준다. 


create table ojc ( 

 id number constraint ojc_pk primary key, 

 name varchar2(20) not null constraint ojc_uk unique); 


테이블이 생성되었습니다. 


insert into ojc values (1,'1길동'); 

insert into ojc values (2,'2길동'); 


COMMIT;


INSERT를 또 실행하는 경우


insert into ojc values (1,'1길동'); 

insert into ojc values (2,'2길동'); 


insert into ojc values (1,'1길동'); 

insert into ojc values (1,'1길동') 

1행에 오류: 

ORA-00001: 무결성 제약 조건(SCOTT.OJC_PK)에 위배됩니다 


-- 이번에는 힌트를 사용해 보자. 힌트 안의 인자에 기인하여 에러메시지가 달라진다. 

-- 인자로는 칼럼 명 하나, 또는 제약조건의 이름을 넣어주면 된다. 


-- id칼럼에 중복 키 오류가 나면... ORA-38911 에러코드가 출력되고 다른 칼럼에서 중복 키 오류가 발생하면 ORA-00001이 출력된다. 

insert /*+ change_dupkey_error_index(ojc(id)) */ into ojc values (2,'2길동'); 


insert /*+ change_dupkey_error_index(ojc(id)) */ into ojc values (2,'2길동') 

1행에 오류: 

ORA-38911: 무결성 제약 조건(SCOTT.OJC_PK)에 위배됩니다 


-- ID 칼럼은 중복 키 오류가 아니고, NAME 칼럼이 중복 키 오류이므로 ORA-00001이 출력된다. 

insert /*+ change_dupkey_error_index(ojc(id)) */ into ojc values (3,'2길동'); 

 insert /*+ change_dupkey_error_index(ojc(id)) */ into ojc values (3,'2길동') 

1행에 오류: 

ORA-00001: 무결성 제약 조건(SCOTT.OJC_UK)에 위배됩니다 


-- NAME 칼럼이 중복 키 오류이므로 ORA-38911이 출력된다.

insert /*+ change_dupkey_error_index(ojc(name)) */ into ojc values (2,'2길동'); 


insert /*+ change_dupkey_error_index(ojc(name)) */ into ojc values (2,'2길동') 

1행에 오류: 

ORA-38911: 무결성 제약 조건(SCOTT.OJC_UK)에 위배됩니다 


-- PK인 ID칼럼이 중복 키 오류이므로 ORA-38911이 출력된다.

insert /*+ change_dupkey_error_index(ojc, ojc_pk) */ into ojc values (2,'2길동'); 


insert /*+ change_dupkey_error_index(ojc, ojc_pk) */ into ojc values (2,'2길동') 

1행에 오류: 

ORA-38911: 무결성 제약 조건(SCOTT.OJC_PK)에 위배됩니다 


-- UK인 NAME칼럼이 중복 키 오류이므로 ORA-38911이 출력된다.

insert /*+ change_dupkey_error_index(ojc, ojc_uk) */ into ojc values (2,'2길동'); 


insert /*+ change_dupkey_error_index(ojc, ojc_uk) */ into ojc values (2,'2길동') 

1행에 오류: 

ORA-38911: 무결성 제약 조건(SCOTT.OJC_UK)에 위배됩니다 


이 힌트를 이용하면 PL/SQL 등에서 에러 메시지를 파싱하지 않고 unique key 오류를 구별할 수 있다. 아래 예문을 보자. 


create or replace procedure OJC_TEST 

        is 

      name_uk_error exception; 

      pragma exception_init(name_uk_error, -38911); 

    begin 

      insert /*+ change_dupkey_error_index (ojc(name)) */ into ojc values (1,'1길동'); 

    exception 

    when name_uk_error then 

      dbms_output.put_line('이름 중복...'); 

    when dup_val_on_index then 

     dbms_output.put_line('다른 unique key 제약조건 위배...'); 

   end; 

   /


#CHANGE_DUPKEY_ERROR_INDEX, #ORACLE교육, #오라클힌트, #ORACLE학원, #SQL학원, #오라클학원, #SQL힌트, #오라클힌트, #오라클동영상,

CHANGE_DUPKEY_ERROR_INDEX, ORACLE교육, 오라클힌트, ORACLE학원, SQL학원, 오라클학원, SQL힌트, 오라클힌트, 오라클동영상, 

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...