Есть ли способ сделать сценарий PLSQL, который перечисляет все столбцы, которые являются NULL для каждой записи в таблице? - PullRequest
1 голос
/ 22 октября 2019

Я работаю с огромной базой данных с несколькими столбцами и записями. Я хочу просмотреть конкретную таблицу и составить список столбцов, которые являются пустыми для каждой записи. Возможно ли это без ссылки на все конкретные имена столбцов?

Спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 22 октября 2019

Это возможно, но если у вас много данных, это будет продолжаться долго.

create table xxx as select * from dba_objects where rownum < 10000;

подготовьте тестовую таблицу и получите статистику таблицы. Это может быть длительный процесс.

begin
 dbms_stats.gather_table_stats(user,'XXX',estimate_percent =>100);
 -- ..
 -- others tables to analizye
end;

Создание отчетов.

select table_name,column_name from user_tab_cols where coalesce(low_value,high_value) is null and table_name in('XXX');
0 голосов
/ 22 октября 2019

Вы можете использовать приведенный ниже скрипт для поиска пустых столбцов в вашей базе данных -

DECLARE
    COUNT_COL INT;
    SQL_STR VARCHAR2(100); 
BEGIN
    FOR I IN (SELECT OBJECT_NAME, COLUMN_NAME
              FROM USER_OBJECTS UO
              JOIN USER_TAB_COLS UTC ON UO.OBJECT_NAME = UTC.TABLE_NAME) LOOP
          SQL_STR := 'SELECT COUNT(1) FROM ' || I.OBJECT_NAME || ' WHERE ' || i.COLUMN_NAME || ' IS NOT NULL';
          EXECUTE IMMEDIATE SQL_STR INTO COUNT_COL;
          IF COUNT_COL = 0 THEN
              DBMS_OUTPUT.PUT_LINE(I.COLUMN_NAME);
          END IF;
    END LOOP;
END;

Здесь - это скрипка.

0 голосов
/ 22 октября 2019

Попробуйте для всех записей в таблице:

SELECT a.owner, a.table_name, b.column_name
 FROM all_tables a, all_tab_columns b
WHERE a.table_name = '<TABLE_NAME>'
AND a.table_name = b.table_name
AND a.num_rows = b.num_nulls

Для всех таблиц

SELECT a.owner, a.table_name, b.column_name
  FROM all_tables a, all_tab_columns b
 WHERE a.table_name = b.table_name
 AND a.num_rows = b.num_nulls
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...