Если структура используемых объектов фиксирована, то мы используем простой SQL.
Если же мы хотим выполнить действия, формируя сам текст команды динамически, то для этого используется динамический SQL, который обычно реализуется с помощью команды execute immediate.
Кроме того, DDL-команды в PL/SQL-блоке можно выполнять только через execute immediate.
Например,
declare
v_table_name varchar2(30);
v_vw_name varchar2(30);
v_table_name2 varchar2(30);
begin
-- Добавим столбец в динамически заданной таблице
v_table_name := 'KK1';
execute immediate 'alter table ' || v_table_name || ' add id_2 integer';
-- Динамически создадим вьюшку
v_table_name := 'KK2';
execute immediate 'create or replace view vw_' || v_table_name ||
' as select * from ' || v_table_name;
-- Вернем результат динамически сформированного запроса в переменную
v_vw_name := 'USER_TABLES';
execute immediate 'select min(table_name) from ' || v_vw_name ||
' where table_name <> ''' || v_table_name || ''''
into v_table_name2;
dbms_output.put_line(v_table_name2);
end;
Вывод DBMS_OUTPUT можно смотреть в PL/SQL Developer на соседней закладке с закладкой ‘SQL’.
Задача. Удаление конкретной таблицы, если она существует.
Во вьюшке user_tables можно увидеть таблицы пользователя, под которым залогинен.
Создать таблицу kk_tst. Написать код который проверяет, существует ли таблица kk_tst.