2014-08-29 4 views
1

Oracle 데이터베이스에 연결하고 필요에 따라 SQL 쿼리를 실행하는 Pro * C 코드가 있습니다. 다음과 같이 간단한 SQL 쿼리 :해결할 Pro * C 코드 처리 ORA-01405 : 가져온 열 값이 NULL입니다.

SELECT A, B FROM TBL1 WHERE A = 'a' 

는 TBL1에서 오류를 ORA-01405: fetched column value is NULL 참고 얼굴은, A는 VARCHAR2 (30) 및 B로 정의된다 NUMBER (4,2)이다. 내 Pro * c 버전은 Pro*C/C++: Release 11.2.0.3.0 이고 GNU gcc 계열의 컴파일러 g ++ 버전 2.95.3을 사용하고 있습니다. Oracle 설명서 (http://docs.oracle.com/cd/A57673_01/DOC/api/doc/PC_22/ch03a.htm는)

if you SELECT or FETCH a null into a host variable that has no indicator, Oracle issues the following error message: 

ORA-01405: fetched column value is NULL 

한 권장 조치는 것을 말한다 : 나는 PROC 명령이 플래그를 추가하려고 할 때 우리는하지만, 프로 * C를 실행하는 동안 ORA-01405 메시지를 해제하는 UNSAFE_NULL = YES를 지정할 수 있습니다, 그것을 MODE = ORACLE이고 DBMS = V7 또는 V8 인 경우 UNSAFE_NULL = YES 허용됨

다른 제안 사항이 있습니까?

+2

지표 변수 사용 .... –

답변

2

Pro * C를 수행 한 이후로 몇 년이되었지만 이전 버전의 Pro * C에서 처음 발견 된 것을 기억하고 표시기 변수를 사용하여 값이 NULL인지 아닌지 확인해야했습니다. 그러나 오라클이 STRING 데이터 유형을 도입했을 때 이러한 변화가있었습니다. 나는 이것을 너무 좋아해 TO_CHAR 숫자를 시작하여 STRING에 저장하기 시작했습니다.

는 연결이 문서에서이 문제를 참조하십시오 STRING 값은 항상 null로 끝나는 것을 제외하고

문자열 데이터 타입은 VARCHAR2 데이터 형과 같다

STRING.

입력시 Oracle은 null 종결 자에 대한 스캔을 제한하기 위해 지정된 길이 인 을 사용합니다. null 종료자가없는 경우 오라클은 오류를 생성합니다. 길이를 지정하지 않으면 Oracle은 최대 길이를 2000 바이트로 가정합니다. STRING 값의 최소 길이는 2 바이트입니다. 첫 번째 문자가 널 종료자인 이고 지정된 길이가 2 인 경우 Oracle은 열이 NOT NULL로 정의되지 않는 한 을 삽입합니다. 열이 NOT NULL로 정의되면 오류가 발생합니다. 모든 공백 값은 그대로 저장됩니다.

출력 Oracle은 리턴 된 마지막 문자에 널 (Null) Y이트를 추가합니다. 문자열 길이가 지정된 길이를 초과하면 Oracle은 출력 값을 으로 자르고 널 바이트를 추가합니다. 널 (NULL)이 선택되면 오라클은 첫 번째 문자 위치에 널 바이트를 리턴합니다. 널 검출 용 지표를 사용

0

:

짧은 idxA, idxB;

FETCH ... INTO : varA : idxA, : varB : idxB;

값이 NULL이면 표시기가 -1로 설정됩니다.