Oracle 데이터베이스 에서 Count 할 수 없 는 필드 형식
문제 발생
프로젝트 개발 을 하 는 과정 에서 지 정 된 데이터베이스 의 모든 테이블 의 기본 정보 (필드 개수, 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
) {。。。}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
activemq 5.5 의 입문 은 설치, 시작, 데이터베이스 지속 화 를 포함한다Apache ActiveMQ 5.5.0 은 주로 유지보수 버 전 으로 130 개가 넘 는 문 제 를 복 구 했 으 며 대부분 bug 와 개선 이 었 다. Improved performance for offline d...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.