Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 найти все поля со значениями NULL  [new]
Hans Christian Andersen
Member

Откуда: зачем Вам?
Сообщений: 230
Всем привет,

хочу найти таблицы и поля со значениями NULL.
Попробовал такой код:

WITH  tables_column AS
  (SELECT /*+materialize */ table_name, column_name
   FROM   cols
   WHERE  1=1
   and data_type in ('DATE','NUMBER','VARCHAR2','CHAR')
   --and table_name like '%NAMEOFTABLE'
   )
SELECT 
       SUBSTR (table_name, 1, 14) "Table",
       SUBSTR (column_name, 1, 14) "Column"
FROM   tables_column,
       TABLE (xmlsequence (dbms_xmlgen.getxmltype ('select "'
       || column_name
       || '" from "'
       || table_name
       || '" where "'
       || column_name
       || '" is NULL' ).extract ('ROWSET/ROW/*') ) ) t
ORDER  BY "Table"


Почему не работает?
Заранее спасибо.
10 окт 18, 18:32    [21700896]     Ответить | Цитировать Сообщить модератору
 Re: найти все поля со значениями NULL  [new]
-2-
Member

Откуда:
Сообщений: 14118
Hans Christian Andersen
Почему не работает?
потому что выдает ошибку.
10 окт 18, 18:47    [21700911]     Ответить | Цитировать Сообщить модератору
 Re: найти все поля со значениями NULL  [new]
Hans Christian Andersen
Member

Откуда: зачем Вам?
Сообщений: 230
-2-,

Код ошибку не выдает. Просто не ищет заданное значение "column_name ist NULL"
10 окт 18, 19:06    [21700926]     Ответить | Цитировать Сообщить модератору
 Re: найти все поля со значениями NULL  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16916
Hans Christian Andersen
Всем привет,
хочу найти таблицы и поля со значениями NULL.

select owner, table_name, column_name from all_tab_cols
where data_type in ('DATE','NUMBER','VARCHAR2','CHAR')
  and nullable = 'Y'
  and num_nulls > 0
10 окт 18, 19:11    [21700930]     Ответить | Цитировать Сообщить модератору
 Re: найти все поля со значениями NULL  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9244
Hans Christian Andersen,

Медитируй на тему:

       TABLE (xmlsequence (dbms_xmlgen.getxmltype ('select "'
       || column_name
       || '" from "'


и

       TABLE (xmlsequence (dbms_xmlgen.getxmltype ('select '''
       || column_name
       || ''' from "'


Ну и AND ROWNUM = 1 то добавь.

SQL> WITH  tables_column AS
  2    (SELECT /*+materialize */ table_name, column_name
  3     FROM   cols
  4     WHERE  table_name = 'EMP' and column_name = 'COMM'
  5     and data_type in ('DATE','NUMBER','VARCHAR2','CHAR')
  6     --and table_name like '%NAMEOFTABLE'
  7     )
  8  SELECT
  9         SUBSTR (table_name, 1, 14) "Table",
 10         SUBSTR (column_name, 1, 14) "Column"
 11  FROM   tables_column,
 12         TABLE (xmlsequence (dbms_xmlgen.getxmltype ('select "'
 13         || column_name
 14         || '" from "'
 15         || table_name
 16         || '" where "'
 17         || column_name
 18         || '" is NULL AND ROWNUM  =1' ).extract ('ROWSET/ROW/*') ) ) t
 19  ORDER  BY "Table"
 20  /

no rows selected

SQL> WITH  tables_column AS
  2    (SELECT /*+materialize */ table_name, column_name
  3     FROM   cols
  4     WHERE  table_name = 'EMP' and column_name = 'COMM'
  5     and data_type in ('DATE','NUMBER','VARCHAR2','CHAR')
  6     --and table_name like '%NAMEOFTABLE'
  7     )
  8  SELECT
  9         SUBSTR (table_name, 1, 14) "Table",
 10         SUBSTR (column_name, 1, 14) "Column"
 11  FROM   tables_column,
 12         TABLE (xmlsequence (dbms_xmlgen.getxmltype ('select '''
 13          || column_name
 14          || ''' from "'
 15         || table_name
 16         || '" where "'
 17         || column_name
 18         || '" is NULL AND ROWNUM  =1' ).extract ('ROWSET/ROW/*') ) ) t
 19  ORDER  BY "Table"
 20  /

Table
--------------------------------------------------------
Column
--------------------------------------------------------
EMP
COMM


SQL> 


SY.
10 окт 18, 19:30    [21700941]     Ответить | Цитировать Сообщить модератору
 Re: найти все поля со значениями NULL  [new]
SkilledJunior
Member

Откуда:
Сообщений: 295
Hans Christian Andersen,

Когда собираешь строку запроса, проверяй что получается.

declare
  table_name  varchar2(30) := 'DUAL';
  column_name varchar2(30) := 'DUMMY';
  l_query     varchar2(200);
begin
    select
           'select "'
           || column_name
           || '" from "'
           || table_name
           || '" where "'
           || column_name
           || '" is NOT NULL'
    into l_query 
    from dual;
    dbms_output.put_line('Вариант 1: ' || l_query);

    select
           'select '''
           || column_name
           || ''' from "'
           || table_name
           || '" where "'
           || column_name
           || '" is NOT NULL'
    into l_query 
    from dual;
    dbms_output.put_line('Вариант 2: ' || l_query);
end;


Вариант 1: select "DUMMY" from "DUAL" where "DUMMY" is NOT NULL
Вариант 2: select 'DUMMY' from "DUAL" where "DUMMY" is NOT NULL


Оба варианта работают, но результат цуть цуть разный.
11 окт 18, 00:07    [21701106]     Ответить | Цитировать Сообщить модератору
 Re: найти все поля со значениями NULL  [new]
Hans Christian Andersen
Member

Откуда: зачем Вам?
Сообщений: 230
Спасибо andrey_anonymous и SY
11 окт 18, 00:20    [21701112]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить