Pull to refresh

Comments 3

Вот поэтому я никогда и не показываю рабочие скрипты. Они обычно написаны наспех и годятся только для внутреннего пользования.

В скрипте «Информация о таблицах»
* таблица «d» джойнится только имени таблицы, когда надо джойнить по 2м полям.
* запрос раз в 10 тяжелее чем можно было бы за счет джойнов с запросами с предварительной группировкой.

Скрипт «Скрипт «Атрибутный состав таблиц»» не смог дождаться завершения при копипасте с сайте. Выключил через 2 минуты. Притом, что ожидаемый вывод 2 строки:
SCHEMA_NAME_1 TABLE_NAME_1
SCHEMA_NAME_1 TABLE_NAME_2

Поведение вызвано тем же GROUP BY.

PS. добавлю облегченный скрипт «Информация о таблицах».
WITH filter(owner, table_name)
     AS (SELECT 'SCHEMA_NAME_1'
               ,t.*
           FROM TABLE(sys.odcivarchar2list('TABLE_NAME_1', 'TABLE_NAME_2')) t
         UNION ALL
         SELECT owner
               ,table_name
           FROM all_tables
          WHERE owner = 'SCHEMA_NAME_2')
SELECT   a.owner AS schema_name
        ,a.table_name
        ,e.comments
        ,b.num_rows as height
        ,(SELECT   COUNT(1) AS width
              FROM all_tab_columns x
             WHERE x.owner = a.owner
               AND x.table_name = a.table_name
          GROUP BY owner, table_name)
            width
        ,(SELECT   LISTAGG(column_name || ' (' || data_type || ')', ', ') WITHIN GROUP (ORDER BY column_id)
                      AS datetime_columns
              FROM all_tab_columns x
             WHERE (data_type = 'DATE'
                 OR data_type LIKE 'TIMESTAMP%'
                 OR data_type LIKE 'INTERVAL%'
                 OR LOWER(column_name) LIKE '%period%'
                 OR LOWER(column_name) LIKE '%date%'
                 OR LOWER(column_name) LIKE '%time%')
               AND x.owner = a.owner
               AND x.table_name = a.table_name
          GROUP BY owner, table_name)
            datetime_columns
        ,b.avg_row_len
        ,(SELECT   LISTAGG(column_name, ', ') WITHIN GROUP (ORDER BY column_position) AS part_key
              FROM all_part_key_columns x
             WHERE object_type = 'TABLE'
               AND x.owner = a.owner
               AND x.name = a.table_name
          GROUP BY owner, name)
            part_key
        ,(SELECT   LISTAGG(column_name, ', ') WITHIN GROUP (ORDER BY column_position) AS subpart_key
              FROM all_subpart_key_columns x
             WHERE object_type = 'TABLE'
               AND x.owner = a.owner
               AND x.name = a.table_name
          GROUP BY owner, name)
            subpart_key
    FROM filter a
         LEFT JOIN all_tab_statistics b
            ON a.table_name = b.table_name
           AND a.owner = b.owner
           AND b.object_type = 'TABLE'
         LEFT JOIN all_tab_comments e
            ON a.table_name = e.table_name
           AND a.owner = e.owner
           AND table_type = 'TABLE'
ORDER BY a.owner, a.table_name

Спасибо, koropovskiy, ошибку с join подправил. Над скоростью работаем.
Добавлена информация по виртуальным столбцам
Sign up to leave a comment.