Как я могу найти столбцы, которые имеют ненулевые значения? - PullRequest
1 голос
/ 05 апреля 2011

У меня есть много столбцов в базе данных Oracle, и некоторые новые добавляются со значениями.Мне нравится выяснять, какие столбцы имеют значения, отличные от 0 или нуля.Поэтому я ищу имена столбцов, для которых хотя бы в одной строке есть какие-то полезные значения.

Как мне это сделать?

Обновление: звучит очень близкоКак мне изменить это в соответствии с моими потребностями?

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

Ответы [ 4 ]

1 голос
/ 18 сентября 2012
Select Column_name
from user_tab_columns
where table_name='EMP' and num_nulls=0;

Это находит столбцы, которые не имеют никаких значений, так что вы можете выполнить с ними какие-либо действия.

1 голос
/ 05 апреля 2011

Вы можете запросить все столбцы, используя представление dba_tab_cols, а затем посмотреть, есть ли столбцы со значениями, отличными от 0 или нуля.

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 
  1. Если у вас есть синонимы в некоторых схемах, вы можете обнаружить, что некоторые таблицы повторяются.Вам придется изменить код, чтобы соответствовать этому.

  2. Кроме того, проверка "не равно нулю" может быть недопустимой для столбцов, которые не являются целыми числами и приведет к ошибкамесли столбцы имеют тип данных date.Вам нужно будет добавить условия для этих случаев.используйте столбец Data_type в dba_tab_cols и добавьте условие при необходимости.

0 голосов
/ 05 апреля 2011
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 () нужен только один ряд и оптимизировать тихо / прозрачно.PS Добавьте свой тест на ноль в подзапрос.

0 голосов
/ 05 апреля 2011

Извините, я неправильно прочитал вопрос в первый раз.

Из этого сообщения на форумах Oracle

Предположим, что ваша статистика актуальна:

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

Вернет вам список имен таблиц и столбцов, которые являются нулевыми.Вы можете добавить что-то вроде:

AND t.table_name = upper('Your_table_name')

, чтобы ограничить результаты только вашей таблицей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...