Часть 1. Написать PL/SQL блок, который дропает все таблицы текущей схемы, начинающиеся на 'KK_'.
Напишем блок, запускающий динамический SQL:
begin
for z in (select 'drop table ' || table_name as drop_statement
from user_tables
where table_name like 'KK%') loop
execute immediate z.drop_statement;
end loop;
end;
Часть 2. Написать PL/SQL блок, который выдает в DBMS_OUTPUT скрипт удаления всех вьюшек текущей схемы, начинающихся с 'VW_KK%'.
Напишем блок, выдающий скрипт:
BEGIN
FOR Z IN (SELECT VIEW_NAME FROM USER_VIEWS WHERE VIEW_NAME LIKE 'VW_KK%') LOOP
DBMS_OUTPUT.PUT_LINE('DROP VIEW ' || TO_CHAR(Z.VIEW_NAME) || ';');
END LOOP;
END;
Задача. Отчет о максимальных ID.
Создать пустую таблицу KK_MAX_ID_REPORT(table_name varchar2(30), max_id number).
Написать PL/SQL блок, который по всем таблицам текущей схемы, начинающимся с 'KK', в которых есть поле ID c типом данных NUMBER или INTEGER, заполняет таблицу KK_MAX_ID_REPORT данными о максимальных значениях поля ID.
Создадим таблицу для отчета:
CREATE TABLE KK_MAX_ID_REPORT(TABLE_NAME VARCHAR2(30), MAX_ID NUMBER);
Напишем и выполним решающий задачу блок с динамическим SQL:
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE TABLE KK_MAX_ID_REPORT';
FOR Z IN (SELECT TABLE_NAME
FROM USER_TAB_COLUMNS
WHERE TABLE_NAME LIKE 'KK%'
AND COLUMN_NAME = 'ID'
AND DATA_TYPE IN ('NUMBER', 'INTEGER')) LOOP
EXECUTE IMMEDIATE 'INSERT INTO KK_MAX_ID_REPORT (TABLE_NAME, MAX_ID) SELECT ''' ||
Z.TABLE_NAME || ''', MAX(ID) FROM ' || Z.TABLE_NAME;
END LOOP;
COMMIT;
END;
Проверим результат:
SELECT * FROM KK_MAX_ID_REPORT;