Если я удаляю таблицу, а таблицы не существует, я получаю сообщение об ошибке

Мне нужно удалить таблицу и сделать новую. Если я удаляю таблицу, а таблицы не существует, я получаю сообщение об ошибке

Как я могу проверить, существует ли таблица?

Я работаю над Oracle 11g

Заранее спасибо.


person Gold    schedule 12.01.2010    source источник
comment
Получение ошибки — это не конец света — вы можете просто обработать ошибку с помощью обработчика исключений, если таблица не существует.   -  person Jeffrey Kemp    schedule 13.01.2010
comment
возможный дубликат Oracle: если таблица существует   -  person Jeffrey Kemp    schedule 27.06.2012


Ответы (4)


Вы можете сделать что-то вроде этого:

DECLARE v_exist PLS_INTEGER;
BEGIN

SELECT COUNT(*) INTO v_exist
FROM user_tables
WHERE table_name = 'YOURTABLEHERE';

IF v_exist = 1 THEN
    EXECUTE IMMEDIATE 'DROP TABLE YOURTABLEHERE';
END IF;
person Scott Anderson    schedule 12.01.2010

DECLARE
  eTABLE_OR_VIEW_DOES_NOT_EXIST  EXCEPTION;
  PRAGMA EXCEPTION_INIT(eTABLE_OR_VIEW_DOES_NOT_EXIST, -942);
BEGIN
  EXECUTE IMMEDIATE 'DROP TABLE SCHEMA.WHATEVER';
EXCEPTION
  WHEN eTABLE_OR_VIEW_DOES_NOT_EXIST THEN
    NULL;
END;

Делитесь и наслаждайтесь.

person Bob Jarvis - Reinstate Monica    schedule 13.01.2010

что-то типа

select count(*) from user_tables 
where table_name= :table name

or

select count(*) from dba_tables
where owner = :table owner
and table_name = :table name

или жесткая альтернатива:

begin execute immediate 'drop table table_name'; 
exception when others then null; 
end;
person davek    schedule 12.01.2010

Я использовал следующую процедуру, чтобы позаботиться об этом:

create or replace procedure drop_table_if_exists ( p_table_name varchar2 )
is
  it_exist number;
begin
  select count(*) 
     into it_exists
     from user_tables
     where table_name = p_table_name
  ;
  if it_exists >= 1 then
    execute immediate 'drop table '||p_table_name;
  end if;
end;
/

exec drop_table_if_exists ( 'TABLE_TO_DROP' );
person Philip Schlump    schedule 13.01.2010