Комментарии 3
Вот поэтому я никогда и не показываю рабочие скрипты. Они обычно написаны наспех и годятся только для внутреннего пользования.
В скрипте «Информация о таблицах»
* таблица «d» джойнится только имени таблицы, когда надо джойнить по 2м полям.
* запрос раз в 10 тяжелее чем можно было бы за счет джойнов с запросами с предварительной группировкой.
Скрипт «Скрипт «Атрибутный состав таблиц»» не смог дождаться завершения при копипасте с сайте. Выключил через 2 минуты. Притом, что ожидаемый вывод 2 строки:
SCHEMA_NAME_1 TABLE_NAME_1
SCHEMA_NAME_1 TABLE_NAME_2
Поведение вызвано тем же GROUP BY.
PS. добавлю облегченный скрипт «Информация о таблицах».
В скрипте «Информация о таблицах»
* таблица «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
0
Спасибо, koropovskiy, ошибку с join подправил. Над скоростью работаем.
0
Добавлена информация по виртуальным столбцам
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Как упростить исследование БД Oracle: «джентльменский набор» скриптов