Если бы я был вами, я бы создал отдельную процедуру для обработки таблицы, а затем имел бы исключение. Это делает его модульным кодом; простой в модульном тестировании и т. д.
Например: процедура будет выглядеть примерно так:
PROCEDURE create_table (in_new_table_name in varchar2,
in_old_table_name in varchar2)
is
E_TAB_EXISTS EXCEPTION;
PRAGMA EXCEPTION_INIT(E_TAB_EXISTS,-955);
BEGIN
execute immediate 'create table ' || in_new_table_name || ' AS SELECT * FROM '|| in_old_table_name || ' WHERE 1=0';
EXCEPTION
WHEN E_TAB_EXISTS THEN
NULL;
END create_table;
и вы бы назвали это как:
If testes = 0 then
create_table(in_new_table_name => prefix || sii_bck_tab_id_seq.nextval,
in_old_table_name => n_tab);
...
end if;
В идеале вы создаете свой код в пакете и можете просто использовать новую процедуру как отдельную процедуру в пакете.