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

Задача. Удаление любой таблицы с проверкой на существование.

Написать процедуру kk_drop_table_if_exists(in_table_name in varchar2), которая дропает таблицу только, если она существует в текущей схеме, иначе процедура ничего не делает.

create or replace procedure kk_drop_table_if_exists(in_table_name in varchar2) is

begin

for z in (select table_name

from user_tables

where table_name = in_table_name) loop

execute immediate 'drop table ' || in_table_name;

end loop;

end kk_drop_table_if_exists;

Проверим:

begin

kk_drop_table_if_exists('KK1');

end;

Задача. Конструкция '%rowcount'.

Создать таблицу:

create table kk_objects_list(object_name varchar2(30));

1) С помощью динамического вызова команды truncate очистить таблицу kk_objects_list от данных.

2) Открыть явный курсор со списком объектов текущей схемы, начинающихся с 'KK_'. Сделать fetch всех данных из курсора. С помощью конструкции <имя явного курсора>%rowcount выдать в dbms_output количество строк в этом курсоре. Закрыть курсор.

3) Вставить в таблицу kk_objects_list перечень имен всех объектов текущей схемы. С помощью конструкции sql%rowcount выдать в dbms_output количество вставившихся строк.

Напишем и выполним такой блок кода и посмотрим в dbms_output.

declare

cursor kk_cr is

select object_name

from all_objects

where object_name like 'KK\_%' escape '\';

v_gt kk_cr%rowtype;

begin

-- 1

execute immediate 'truncate table kk_objects_list';

dbms_output.put_line('1) Таблица kk_objects_list очищена от данных.');

-- 2

open kk_cr;

fetch kk_cr

into v_gt;

while kk_cr%found loop

fetch kk_cr

into v_gt;

end loop; /* только после полного fetch-а в kk_cr%rowcount будет полное количество строк в курсоре */

dbms_output.put_line('2) Найдено ' || to_char(kk_cr%rowcount) ||

' объектов текущей схемы, начинающихся с ''KK_''.');

close kk_cr;

-- 3

insert into kk_objects_list

(object_name)

select object_name from user_objects;

dbms_output.put_line('3) В таблицу kk_objects_list вставлено ' ||

to_char(sql%rowcount) ||

' имен объектов текущей схемы.'); /* это значение sql%rowcount "забудется" после commit или следующей команды */

commit;

end;

Можно посмотреть результат последней вставки:

select object_name from kk_objects_list;

Конструкцию sql%rowcount можно использовать не только поле insert, но и после update, delete, merge.

Задача. Удаление всех таблиц и вьюшек.

Часть 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;

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