Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Oracle Tutorial.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
401.64 Кб
Скачать

Задача. Last_ddl_time.

Выдать список объектов из 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 TABLE KK_TABLE1(ID1 INTEGER, ID2 INTEGER, ID3 INTEGER);

CREATE TABLE KK_TABLE2(NAME1 VARCHAR2(10), NAME2 VARCHAR2(10));

CREATE TABLE KK_TABLE3(DT1 DATE);

CREATE TABLE KK_TABLE4(С1 CHAR(1), C2 CHAR(2));

Во вьюшке 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

DBMS_OUTPUT.PUT_LINE('SELECT ' || SUBSTR(V_COLUMN_LIST, 3) ||

' FROM ' || V_PREV_TABLE_NAME || ';');

V_COLUMN_LIST := '';

END IF;

V_COLUMN_LIST := V_COLUMN_LIST || ', ' || V_GT.COLUMN_NAME; /*Накапливаем список столбцов*/

V_PREV_TABLE_NAME := V_GT.TABLE_NAME; /*Запоминаем таблицу с прошлой итерации цикла. Если таблица поменялась, то вывести готовый SELECT, иначе следует накапливать ее столбцы в V_COLUMN_LIST.*/

EXIT WHEN CR_TAB_COLUMNS%NOTFOUND;

END LOOP;

CLOSE CR_TAB_COLUMNS;

END;

Задача. Компиляция схемы.

Выдать из user_objects скрипт компиляции инвалидных объектов (status = 'INVALID').

Если функции, процедуры или пакеты содержат ошибки или пришли в неоткомпилированное состояние в результате изменений в объектах, от которых они зависят, то они видны в user_objects со статусом status = 'INVALID'.

Компилировать их можно такими командами:

alter function kk_fnc compile;

alter procedure kk_prc compile;

alter package kk_pkg compile;

alter package kk_pkg compile body;

При изменении объектов следует не забывать о компиляции зависящих от них объектов.

Также всю схему можно откомпилировать радикальным вызовом:

begin

dbms_utility.compile_schema('<имя схемы>');

end;

Этот запрос выдает скрипт, решающий задачу:

SELECT 'ALTER ' || OBJECT_TYPE || ' ' || OBJECT_NAME || ' COMPILE;' SCRIPT

FROM USER_OBJECTS

WHERE STATUS = 'INVALID'

AND OBJECT_TYPE <> 'PACKAGE BODY'

UNION ALL

SELECT 'ALTER PACKAGE ' || OBJECT_NAME || ' COMPILE BODY;' SCRIPT

FROM USER_OBJECTS

WHERE STATUS = 'INVALID'

AND OBJECT_TYPE = 'PACKAGE BODY';

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]