Шаг 1. Выясните, какие ошибки вы хотите отловить:
Если таблица не существует:
SQL> drop table x;
drop table x
*
ERROR at line 1:
ORA-00942: table or view does not exist
Если таблица используется:
SQL> create global temporary table t (data varchar2(4000));
Table created.
Используйте таблицу в другом сеансе. (Обратите внимание, что после вставки нет фиксации или чего-либо еще.)
SQL> insert into t values ('whatever');
1 row created.
Вернувшись в первую сессию, попытайтесь сбросить:
SQL> drop table t;
drop table t
*
ERROR at line 1:
ORA-14452: attempt to create, alter or drop an index on temporary table already in use
Итак, две ошибки, которые нужно отловить:
- ORA-00942: таблица или представление не существует
- ORA-14452: попытка создать, изменить или удалить индекс уже используемой временной таблицы
Проверьте, являются ли ошибки предустановленными. Это не так. Поэтому их нужно определить так:
create or replace procedure p as
table_or_view_not_exist exception;
pragma exception_init(table_or_view_not_exist, -942);
attempted_ddl_on_in_use_GTT exception;
pragma exception_init(attempted_ddl_on_in_use_GTT, -14452);
begin
execute immediate 'drop table t';
exception
when table_or_view_not_exist then
dbms_output.put_line('Table t did not exist at time of drop. Continuing....');
when attempted_ddl_on_in_use_GTT then
dbms_output.put_line('Help!!!! Someone is keeping from doing my job!');
dbms_output.put_line('Please rescue me');
raise;
end p;
И результаты, сначала без t
:
SQL> drop table t;
Table dropped.
SQL> exec p;
Table t did not exist at time of drop. Continuing....
PL/SQL procedure successfully completed.
А теперь, когда используется t
:
SQL> create global temporary table t (data varchar2(4000));
Table created.
В другом сеансе:
SQL> insert into t values (null);
1 row created.
И вот на первом сеансе:
SQL> exec p;
Help!!!! Someone is keeping from doing my job!
Please rescue me
BEGIN p; END;
*
ERROR at line 1:
ORA-14452: attempt to create, alter or drop an index on temporary table already in use
ORA-06512: at "SCHEMA_NAME.P", line 16
ORA-06512: at line 1
person
Shannon Severance
schedule
28.10.2011
create global temporary table ....
) Если да, то почему вы его бросаете? Является ли это частью сценария установки? Если нет, возможно, глобальная временная таблица удовлетворит ваши потребности без необходимости ее удаления. - person Shannon Severance   schedule 28.10.2011