2011-04-05 4 views
1

Oracle 데이터베이스에 많은 열이 있으며 일부 새로운 값이 추가됩니다. 어떤 열이 0 또는 null이 아닌지 알아야합니다. 그래서 어떤 종류의 유용한 값이 최소한 하나의 행에 존재하는 열 이름을 찾고 있습니다.null이 아닌 값을 가진 열은 어떻게 찾을 수 있습니까?

어떻게하면됩니까?

업데이트 : 이것은 매우 가깝습니다. 내 필요에 맞게이를 어떻게 수정합니까?

select column_name, nullable, num_distinct, num_nulls 
from all_tab_columns 
where table_name = 'SOME_TABLE' 

답변

1

dba_tab_cols 뷰를 사용하여 모든 열을 쿼리 한 다음 0 또는 null 이외의 값을 가진 열이 있는지 확인할 수 있습니다.

  1. 일부 스키마에 동의어가있는 경우

    create or replace function f_has_null_rows(
        i_table_name in dba_tab_cols.table_name%type, 
        i_column_name in dba_tab_cols.table_name%type 
    ) return number is 
    v_sql varchar2(200); 
    v_count number; 
    begin 
        v_sql := 'select count(*) from ' || i_table_name || 
          ' where ' || i_column_name ' || ' is not null and ' 
          || i_column_name || ' <>0 '; 
    
        execute immediate v_sql into v_count; 
    
        return v_count; 
    end; 
    /
    
    
    select table_name, column_name from dba_tab_Cols 
    where f_has_null_rows (table_name, column_name) > 0 
    

    , 당신은 강력한 테이블의 일부를 반복 찾을 수 있습니다. 코드를 변경하여 코드를 수정해야합니다.

  2. 또한 정수가 아닌 열에 대해서는 "0이 아닙니다"라는 검사가 유효하지 않을 수 있으며 열이 날짜 데이터 유형 인 경우 오류가 발생합니다. 이러한 경우에 대한 조건을 추가해야합니다. dba_tab_cols의 Data_type 열을 사용하고 필요에 따라 조건을 추가하십시오.

0

죄송합니다. 처음으로 질문을 읽었습니다. 오라클의 포럼에 this post에서

가정 통계는 최신 상태 :

SELECT t.table_name, 
t.column_name 
FROM user_tab_columns t 
WHERE t.nullable = 'Y' 
AND t.num_distinct = 0; 

당신에게 테이블 이름과 null 인 열 목록을 반환합니다. 다음과 같이 추가 할 수도 있습니다.

AND t.table_name = upper('Your_table_name') 

거기에 결과 만 사용자의 테이블로 제한 할 수 있습니다.

+1

그는 행 집합이 아닌 열 목록을 원합니다. – JNK

+0

이것은 더 나은 방법이지만 값이 0 또는 0.00 인 열을 추가하고 싶습니다 (즉, 제 목적으로는 유용하지 않습니다). – aartist

0
select 'cats' as mycolumname from T 
    where exists (Select id from T where cats is not null) 
union 
select 'dogs' as mycolumnname from T 
    where exists (select id from T where dogs is not null) 

# ad nauseam 

은 SQL에서 수행하는 방법입니다. 편집 : SQL의 다른 풍미가 하위 쿼리에서 LIMIT 또는 TOP 'n'을 사용하여 최적화 할 수 있습니다. 또는 EXIST()가 한 행만 필요로하고 자동으로/투명하게 최적화한다는 것을 깨닫기에 충분히 똑똑 할 수도 있습니다. 추신 부질의에 대한 테스트를 추가하십시오.

1
Select Column_name 
from user_tab_columns 
where table_name='EMP' and num_nulls=0; 

이것은 당신이 어떤 작업을 수행 할 수 있도록 모든 값이없는 열을 찾습니다.

+0

"0 또는 null 이외의 값을 가진"열은 제외되지 않습니다. 여기에는 모든 행의 값이 0 인 열이 포함됩니다. – GargantuChet

관련 문제