2011-08-11 5 views
2

Java 프로그램에서 Oracle DB에 대한 쿼리를 실행하고 있습니다. 특정 테이블을 선택하면이 쿼리가 실행되고 사용자의 특성이 반환됩니다.Oracle DB 쿼리 data_length (반환 값)

내 코드의 단순화 된 버전은 다음과 같습니다.

String query = "SELECT column_name, data_type, data_length FROM all_tab_columns WHERE table_name = 'blahblah'"; 
String ColumnName; 
String DataType; 
String DataLength; 

System.out.println(ColumName); 
System.out.println(DataType); 
System.out.println(DataLength); 

나는 data_length이 무엇을 반환하는지 확신 할 수 없습니다.

필드의 데이터 길이를 반환합니까? 아니면 최대 값을 반환하는 것입니다. 어떤 검색을 한 후에 나는 모순되는 의견을 보았습니다. 그리고 데이터 길이를 비교할 때 길이가 길어질 수는 있지만 최대 길이 일 수는 있겠지만 누가 필드를 최대한으로 사용했는지 알 수 있습니까?

예를 들어 :

Data Type = Number가 반환 Data Length = 22

Data Type = VARCHAR2 반환 Data Length = 2000

보너스 : (최종 성적에 +5 점, 그리고 클래스 1 무료 부재)

내가 갖고 있지 않은 데이터를 얻기 위해 쿼리를 어떻게 바꿀 수 있습니까? (실제 데이터 길이 또는 최대 데이터 길이).

+3

하하하. 나의 영리한 말씨 (나는 들썩 들썩했다)에도 불구하고 내 자신의 보너스 질문에 숙제가 아니다. – sealz

답변

7

비교적 쉽게 테스트 할 수 있어야합니다. ALL_TABLE_COLUMNS보기가 없음 -이 정보를 제공하는 ALL_TAB_COLUMNSALL_TAB_COLS보기가 있음에 유의하십시오. 빈 테이블을 만들고 쿼리를 실행하여 교수님이 의도했다고 가정합니다.

SQL> create table empty_table (
    2 col1 number(10,2), 
    3 col2 varchar2(100), 
    4 col3 varchar2(100 byte), 
    5 col4 varchar2(100 char) 
    6 ); 

Table created. 

SQL> select column_name, data_type, data_length 
    2  from all_tab_columns 
    3  where table_name = 'EMPTY_TABLE' 
    4 order by column_name; 

COLUMN_NAME     DATA_TYPE  DATA_LENGTH 
------------------------------ -------------- ----------- 
COL1       NUMBER     22 
COL2       VARCHAR2    100 
COL3       VARCHAR2    100 
COL4       VARCHAR2    300 

이제 실제 결과를 보았으므로, DATA_LENGTH 열에서 반환되는 내용 길이 명확해야한다.

+0

ahh 올바른, 내 실제 코드는 all_tab을 사용하여 편집 할 것이다. 내가 잠깐 하하했다고 생각해. – sealz

+0

나는 그것을 얻었다고 생각한다. 그래서 2 개의 대답 사이에 명확히하기 위해, 그것은 필드가 수용 할 수있는 최대 허용량이다? 그것으로 창조 된 최대량 아닙니다? – sealz

+0

@ harper89 - "만든 최대 금액"이 무슨 뜻인지 잘 모르겠습니다. 'ALL_TAB_COLUMNS'는 열이 생성 된 선언 된 최대 크기를 알려줍니다.테이블 작성 후 해당 열에 삽입 된 데이터에 대해서는 알려주지 않습니다. –

0

이 값은 열이 생성 된 길이를 나타내야합니다.

즉, 숫자의 기본값은 22이지만 숫자 (5) 나 다른 값을 무시할 수 있습니다. varchar2 (4000) 등

열에 포함 된 값의 실제 최대 길이를 찾으려면 데이터 사전이 아닌 테이블 자체를 쿼리해야합니다.

SELECT max(len(mycol)) from mytab; 

이 경우 일부 통계가 수집 될 수 있지만 응용 프로그램에서는 신뢰할 수 없습니다.

+0

@downvoter - 설명해 주시겠습니까? 감사. – Randy

+0

"숫자의 기본값은 22이지만이 NUMBER (5)를 재정의 할 수 있습니다."데이터 길이는 정밀도가 아닙니다. table_name = 'T';는 22의 데이터 길이를 되돌려 준다. –