본문 바로가기

Pro*C

[Pro*C 오라클 DB] 프로그램 오류 처리, 데이터 처리

 

Pro*C

 


 

ORA - 1403 추출할 데이터가 없거나 갱신할 데이터가 없어서 발생함

ORA - 0001 중복된 데이터가 입력되어 발생

ORA - 1555 SELECT 중 읽고 있는 롤백 세그먼트의 이미지 클리어

등 대부분의 경우는 쉽게 해결이 가능하다.

 

하지만

ORA - 1405 의 경우에는 다른 특징이 있음

추출된 데이터에 NULL 이 있을 경우 발생

-> DB의 NULL과 0X00 같은 것이아님

데이터의 처리에 있어 정의할 수 있는 값이 없기 때문에 발생

 

해결방법

1. 프로그램에 의한 해결방법

EXEC SQL DECLARE EMP CURSOR FOR
    SELECT NVL(empno,0), NVL(ename,'-')
    FROM scott.emp;

 

NULL 데이터는 NVL 함수에 기술된 대로 치환되어 추출돈다.

윈칙적으로 NULL 이 추출되지 않기 때문에 해결할 수 있음

하지만 모든 데이터에 대해 검사하기 때문에 성능저하가 발생함

-> 2번방법을 더 많이 사용함

 

 

2. 컴파일러 옵션의 변경을 통한 방법

proc iname=1.pc unsafe_null=yes dbms=v8

 

unsafe_null 옵션과 dbms 옵션을 추가하면 NVL함수를 사용하지 않도고 데이터 추출 오류를 없앨 수 있음

 

 

 


 

galbage 데이터처리

 

테이블 다음 행이 NULL 인 경우

다음행을 추출해야하는데 이떄 다음 데이터가 NULL 이기 때문에

앞서 추출한 데이터 값을 저장하는 변수에서 클리어되지 않은 상황에

같은 데이터가 두 번 나올 수 있음

 

해결 1. NVL 함수 사용

 

해결 2. memset 함수로 FETCH 전에 변수 초기화