Выдать список объектов из user_objects, которые были модифицированы (last_ddl_time) за последние полгода.
SELECT *
FROM USER_OBJECTS
WHERE MONTHS_BETWEEN(SYSDATE, LAST_DDL_TIME) < 6
ORDER BY LAST_DDL_TIME DESC;
Задача. Отчет об объектах текущей схемы.
В цикле по всем объектам из user_objects вывести в dbms_output отчет со следующими полями: тип объекта, название объекта, дата создания. Отсортировать по дате создания.
begin
dbms_output.enable;
for z in (select object_type, object_name, created
from user_objects
order by created) loop
dbms_output.put_line(rpad(z.object_type, 31) ||
rpad(z.object_name, 31) ||
to_char(z.created, 'dd.mm.yyyy hh24:mi:ss'));
end loop;
end;
Задача. DBMS_OUTPUT из явного курсора по словарю данных.
По всем таблицам и вьюшкам, начинающимся с 'KK_TABLE', сгенерировать в dbms_output скрипт выборки всех полей из этих таблиц и вьюшек:
Select column11, column12, … , column1M from table1;
Select column21, column22, … , column2M from table2;
...
Select columnN1, columnN2, … , columnNM from tableN;
CREATE OR REPLACE VIEW KK_TABLE5 AS SELECT ID1, ID3 FROM KK_TABLE1;
Во вьюшке USER_TAB_COLUMNS можно смотреть столбцы таблиц и вьюшек пользователя, под которым залогинен. Напишем блок, решающий задачу с использованием явного именованного курсора CR_TAB_COLUMNS:
DECLARE
CURSOR CR_TAB_COLUMNS IS
SELECT TABLE_NAME, COLUMN_NAME
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME LIKE 'KK_TABLE%'
ORDER BY TABLE_NAME, COLUMN_ID;
V_GT CR_TAB_COLUMNS%ROWTYPE;
V_COLUMN_LIST VARCHAR2(4000) := '';
V_PREV_TABLE_NAME VARCHAR2(30) := '';
BEGIN
OPEN CR_TAB_COLUMNS;
LOOP
FETCH CR_TAB_COLUMNS
INTO V_GT;
IF V_PREV_TABLE_NAME <> V_GT.TABLE_NAME OR CR_TAB_COLUMNS%NOTFOUND /*Если пошла новая таблица или таблицы кончились, вывести SELECT в DBMS_OUTPUT*/ THEN
V_PREV_TABLE_NAME := V_GT.TABLE_NAME; /*Запоминаем таблицу с прошлой итерации цикла. Если таблица поменялась, то вывести готовый SELECT, иначе следует накапливать ее столбцы в V_COLUMN_LIST.*/