Oracle 데이터베이스 에서 Count 할 수 없 는 필드 형식

설 영 스튜디오 판권 소유, 전재 설명 하 세 요 【http://blog.csdn.net/lina791211】
문제 발생
        프로젝트 개발 을 하 는 과정 에서 지 정 된 데이터베이스 의 모든 테이블 의 기본 정보 (필드 개수, comment, 줄 수, 제1차 DDL 시간, 마지막 업데이트 시간 등), 테이블 의 모든 필드 의 기본 정보 (필드 유형, 데이터 양, 비공 식 데이터 양, 길이 등) 를 추출 해 야 한다.
        문 제 는 필드 의 비 어 있 는 데 이 터 를 계산 할 때 발생 합 니 다. count 의 한 유형 이 clob 형 필드 일 때 "'-' 를 얻 으 면 실제 'clob' 입 니 다" 라 고 말 합 니 다. 라 고 경고 했다.
        다음 그림 참조:
그림 1 count 할 수 없 는 힌트
원인 분석
        처음 이 문 제 를 얻 었 을 때 아무리 생각해 도 풀 리 지 않 았 는데 나중에 Oracle 필드 의 유형 을 조회 한 후에 점점 알 게 되 었 다.다음은 Oracle 필드 의 기본 속성 을 보 여 줍 니 다.(아래 필드 유형 이 불완전 할 수 있 습 니 다. 뇌 보 해 주 십시오)
Oracle 필드 유형
필드 형식
묘사 하 다.
필드 길이 및 부족 값
CHAR (size )  
길이 (size) 바이트 의 문자열 데 이 터 를 저장 합 니 다.
각 줄 의 길이 (부족 한 부분 은 빈 칸 으로 보충), 최대 길 이 는 줄 당 2000 바이트 이 며, 부족 한 값 은 줄 당 1 바이트 입 니 다. 길이 (size) 를 설정 하기 전에 문자 집합 을 단일 바이트 나 다 중 바이트 로 고려 해 야 합 니 다.
VARCHAR2 (size ) 
길 어 지 는 문자열 데 이 터 를 저장 하 는 데 사 용 됩 니 다. 최대 바이트 길 이 는 (size) 에서 지정 합 니 다.
줄 당 길이 가 변 할 수 있 습 니 다. 최대 길 이 는 줄 당 4000 바이트 입 니 다. 길이 (size) 를 설정 하기 전에 문자 집합 을 단일 바이트 나 다 바이트 로 고려 해 야 합 니 다.
NCHAR(size )
문자 집합 에 의 해 저 장 된 것 은 길이 (size) 의 문자 나 바이트 입 니 다.
줄 마다 길이 (부족 한 부분 은 빈 칸 으로 보충) 를 정 합 니 다. 고정된 너비 의 문자 집합 에 있어 서 길이 (size) 는 문자 의 개 수 를 말 합 니 다. 넓 어 진 문자 집합 에 있어 서 길이 (size) 는 바이트 의 개 수 를 말 합 니 다. 최대 길이 입 니 다.(size) 한 글자 에 저 장 된 바이트 의 길이 에 따라 줄 당 최대 길 이 는 2000 바이트 입 니 다. 문자 집합 에서 결 성 된 값 을 1 글자 또는 1 바이트 로 결정 합 니 다.
NVARCHAR2 (size )
문자 집합 에서 길 어 지 는 문자 나 바이트 저장 을 결정 합 니 다. 최대 길 이 는 (size) 에서 지정 합 니 다.
줄 마다 길 어 집 니 다. 고정된 너비 의 문자 집합 에 있어 서 길이 (size) 는 문자 의 개 수 를 말 합 니 다. 넓 어 지 는 문자 집합 에 있어 서 길이 (size) 는 바이트 의 개 수 를 말 합 니 다. 최대 길이 (size) 는 한 문자 에 저 장 된 바이트 의 길이 에 달 려 있 습 니 다. 줄 당 최대 길 이 는 4000 바이트 입 니 다. 문자 집합 에 의 해 결 성 된 값 을 1 글자 또는 1 바이트 로 결정 합 니 다.
LONG 
길 어 진 문자열 데 이 터 를 저장 합 니 다.
표 에서 각 줄 의 길 이 는 가 변 적 이 고 최대 길 이 는 줄 당 231 이다. - 1 바이트 또는 2G.
UMBER (p, s )
길 어 진 숫자 를 저장 합 니 다. 그 중에서 정밀도 의 최대 값 은 p 이 고 / 또는 유효한 숫자 자릿수 s 의 최대 값 은 38 입 니 다.
줄 마다 길 어 집 니 다. 줄 마다 최대 길 이 는 21 바이트 입 니 다.
DATE 
정 해진 날짜 나 시간 데 이 터 를 저장 하고 범 위 는 기원전 4712 / 01 / 01 부터 서기 9999 / 12 / 31 까지 입 니 다.
각 줄 은 7 바이트 길이 로 고정 되 어 있 으 며, 결 성 된 날짜 설명 (예 를 들 어 DD - MON - YY) 은 NLS DATE FORMAT 매개 변수 로 설정 되 어 있 습 니 다.
RAW (size ) 
길 어 지 는 바 이 너 리 데 이 터 를 저장 합 니 다. 최대 길 이 는 size 에서 지정 합 니 다. 
표 에서 각 줄 의 길 이 는 가 변 적 이 고 최대 길 이 는 줄 당 2000 바이트 이다.
LONG RAW 
길 어 진 바 이 너 리 데 이 터 를 저장 합 니 다.
표 에서 각 줄 의 길 이 는 가 변 적 이 고 최대 길 이 는 줄 당 231 이다. - 1 바이트 또는 2G.
BLOB 
바 이 너 리 데 이 터 를 저장 합 니 다.
최대 길이 232 - 1 바이트 또는 4G.
CLOB 
단일 바이트 문자 데 이 터 를 저장 합 니 다. 
최대 길이 232 - 1 바이트 또는 4G.
NCLOB
문자 집합 에서 지정 한 단일 바이트 나 고정 너비 다 바이트 또는 넓 어 진 다 바이트 의 문자 데 이 터 를 저장 합 니 다.
최대 길이 232 - 1 바이트 또는 4G.
BFILE 
외부 파일 에 저 장 된 바 이 너 리 데이터.
최대 길이 232 - 1 바이트 또는 4G.
 XML Type
XML type 의 열 은 LOB 열 에 있 는 XML 문 서 를 저장 합 니 다. 문서 에서 하나의 노드 를 추출 할 수 있 는 내 장 된 기능 이 많 으 며, XML Type 문서 에서 모든 노드 에 색인 을 만 들 수 있 습 니 다.
최대 길이 232 - 1 바이트 또는 4G.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
        여기까지 쓰 면 데이터베이스 개발 을 하 는 대부분의 친구 들 이 알 것 같 습 니 다. 왜 어떤 유형의 필드 는 count 를 할 수 없 는 지 알 것 같 습 니 다. 상기 유형 중 LONG, LONG RAW, BLOB, CLOB, NCLOB, BFILE, XMLTYPE 등 몇 가지 속성, 데이터 저장 대 용량 데이터 의 유형 입 니 다. Oracle 데이터베이스 count 필드 는 이 필드 가 NULL 인지, NULL 이 아니라면 먼저 판정 합 니 다.1 을 더 하 세 요.
        이 필드 의 비 중복 필드 를 계산 하려 면 Oracle 은 대량의 데 이 터 를 읽 고 자주 비교 해 야 하지만 시스템 메모리 비용 은 지탱 할 수 없습니다 (예 를 들 어 1000 개의 100 M 데이터 가 비 중복 계산 을 합 니 다. Oracle 이 실현 하려 면 많은 시간 과 메모리 가 소모 되 고 Oracle 은 툭하면 수만 개의 데이터 조작 은 말 할 것 도 없습니다)
        
결어
        위 에 제 가 논술 한 것 은 학식 이 얕 고 이해 가 많 지 않 음 을 감안 하여 상술 한 설명 은 하나의 참고 로 서 정확성 을 추측 할 수 없 으 니 많은 DBA 에 비판 을 주 십시오.
        그리고 프로젝트 에서 나 는 그들의 count 를 직접 돌아 갔다.
if (
	(rs.getString("data_type").indexOf("LONG") < 0) &&		//Long    Oracle    
	(rs.getString("data_type").indexOf("LOB") < 0)	&&		//clob、blob        
			。。。
	(rs.getString("data_type").indexOf("XMLTYPE") < 0)		//xmltype         
										
) {。。。}

좋은 웹페이지 즐겨찾기