[해결[ OCI ( oracle call interface ) 관련 기괴한 현상 ( 오라클 버그 )
안녕하세요 OCI 로 프로그래밍을 하던중 이해 할 수 없는
부분이 있어 글을 남겨 봅니다.
주요 내용은
"alter 문을 이용하요 number( p, s ) 와 같이 precision, scale 값을 지정 추가시 not null 로 추가 될 경우 OCIAttrGet 함수에서 precision 값이 0으로 나온다."
인데 제가 테스트 한 과정은 다음과 같습니다.
1. 정상적인 케이스 (Oracle 11g)
create table oci_error_case ( col1 char(10), col2 number(4), col3 number(4) ) ;
여기서 col3 의 OCIAttrGet 를 통한 precision 값이 4로 나옴
2. 비정상적인 케이스 (Oracle 11g)
create table oci_error_case ( col1 char(10), col2 number(4) ) ;
alter table oci_error_case add col3 number(4) default 0 not null ;
여기서 col3 의 OCIAttrGet 를 통한 precision 값이 0으로 나옴
% 여기서 포인트는 alter col3 에서 not null 이냐 null 이냐 따라 precison 값이 0( not null ) , 4(null )인데 oracle 10g 에서는 위와 같은 현상이 없습니다.
sqlplus 상에서는 다음과 같은 2가지 방법으로 precision 값을 확인 했을 때는 정상입니다.
1. desc oci_error_case
2. select
col#, precision#, scale
from sys.col$
where obj$ = (select obj# from sys.obj$ where name = '테이블명' )
몇일째 원일 찾아보고 있지만 찾지 못하고 있습니다.
작은 단서라도 관심어린 조언 부탁드립니다.
읽어 주셔서 감사합니다.
댓글 달기