Хорошей практикой в разработке баз данных Oracle являются комментарии к объектам физического и логического слоя (таблицам, представлениям, полям) — такая БД является самодокументированной. Вместе со стандартом именования объектов это значительно облегчает жизнь команды разработчиков, облегчает введение в должность новых сотрудников.
Однако приходится иногда делать отчет с группировкой по тем или иным объектам так, чтобы он хорошо выглядел в технической документации по модулю. Приводим пример запроса, который извлекает из БД документацию по интерфейсным представлениям бизнес-модуля «Форма 302». Использованы аналитические функции LAG (предыдущее значение согласно сортировке) и DENSE_RANK (порядковый номер согласно сортировке).
SELECT CASE
WHEN NVL(LAG(uv1.view_name)
OVER (ORDER BY uv1.view_name, tc1.column_name), '#') <> uv1.view_name
THEN DENSE_RANK()
OVER (ORDER BY uv1.view_name)
ELSE NULL
END AS r_num,
CASE
WHEN NVL(LAG(uv1.view_name)
OVER (ORDER BY uv1.view_name, tc1.column_name), '#') <> uv1.view_name
THEN uv1.view_name
ELSE NULL
END AS first_view_name,
tc1.column_name,
cc1.comments
FROM USER_VIEWS uv1
LEFT JOIN USER_TAB_COLUMNS tc1
ON tc1.table_name = uv1.view_name
LEFT JOIN USER_COL_COMMENTS cc1
ON cc1.table_name = uv1.view_name
AND cc1.column_name = tc1.column_name
WHERE LOWER(uv1.view_name) LIKE '%302%gui%v%' /* используйте свои критерии */
ORDER BY uv1.view_name, tc1.column_name
Часть результатов, включая недокументированные представления, пустая — есть где поработать техническим писателям!
| 1 | CBR_302_GUI_DICT_BS_V | BUSINESS_SIZE_CD | |
| BUSINESS_SIZE_NAME | |||
| SORT_ID | |||
| 2 | CBR_302_GUI_DICT_OKATO_V | OKATO_CD | |
| OKATO_CODE | |||
| SORT_ID | |||
| 3 | CBR_302_GUI_DICT_OKVED_V | OKVED_CD | |
| OKVED_CODE | |||
| SORT_ID | |||
| 4 | CBR_302_GUI_OKATO_V | AS_OF_DATE | Отчетная дата |
| FDDR_ID | ID ФДП-отчета | ||
| OKATO | Код Окато | ||
| SECT_ID | Код раздела |
Новости