И ещё раз об удалении таблицы в Oracle.
От: Neonix Россия  
Дата: 13.11.02 09:37
Оценка:
Просьба сразу не пинать ногами и не плеваться в сторону MS SQL'овских программистов.
Данный вопрос уже задавался
(http://www.rsdn.ru/forum/Message.aspx?mid=125123&only=1
Автор: balabolin
Дата: 04.11.02
), а ответа я так и не получил...

Данная проблема действительно стоит и она возникла не из-за неправильной логики программы

Так как же удалить таблицу если она существует? Т.е. что то вроде if exist... drop table
Re: И ещё раз об удалении таблицы в Oracle.
От: Lloyd Россия  
Дата: 13.11.02 09:43
Оценка:
Здравствуйте Neonix, Вы писали:



IF EXISTS(SELECT name 
      FROM      sysobjects 
      WHERE  name = N'table_name' 
      AND      type = 'U')
    DROP TABLE table_name
Re: И ещё раз об удалении таблицы в Oracle.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 13.11.02 09:44
Оценка:
Здравствуйте Neonix, Вы писали:

N>Так как же удалить таблицу если она существует? Т.е. что то вроде if exist... drop table


ну а просто drop table ? Есть — удалится, нет — вернется ошибка что мол table does not exist
Re[2]: И ещё раз об удалении таблицы в Oracle.
От: Neonix Россия  
Дата: 13.11.02 09:54
Оценка:
Здравствуйте Lloyd, Вы писали:

L>


L>
L>IF EXISTS(SELECT name 
L>      FROM      sysobjects 
L>      WHERE  name = N'table_name' 
L>      AND      type = 'U')
L>    DROP TABLE table_name
L>


Нет не проходит...
Re[2]: И ещё раз об удалении таблицы в Oracle.
От: Neonix Россия  
Дата: 13.11.02 09:56
Оценка:
Здравствуйте Odi$$ey, Вы писали:

O$>ну а просто drop table ? Есть — удалится, нет — вернется ошибка что мол table does not exist
Ну неужели в pl/sql нельзя нормальными средствами это сделать? Не прибегая к обработке ошибок? Не поверю
Re: И ещё раз об удалении таблицы в Oracle.
От: andik  
Дата: 13.11.02 10:48
Оценка:
Здравствуйте Neonix, Вы писали:

N>Просьба сразу не пинать ногами и не плеваться в сторону MS SQL'овских программистов.

N>Данный вопрос уже задавался
N>(http://www.rsdn.ru/forum/Message.aspx?mid=125123&only=1
Автор: balabolin
Дата: 04.11.02
), а ответа я так и не получил...


N>Данная проблема действительно стоит и она возникла не из-за неправильной логики программы


N>Так как же удалить таблицу если она существует? Т.е. что то вроде if exist... drop table


посмотри в Oracle документации раздел
Oracle Advanced Replication Data Dictionary Views

там приводится список всех служебных таблиц
в частности там есть таблица ALL_TABLES
Re[3]: И ещё раз об удалении таблицы в Oracle.
От: VVP Россия http://web.icq.com/whitepages/online?icq=67524421&img=567524421
Дата: 13.11.02 11:42
Оценка: 3 (1)
Здравствуйте Neonix, Вы писали:

N>Ну неужели в pl/sql нельзя нормальными средствами это сделать? Не прибегая к обработке ошибок? Не поверю


Ладно, блин,
  pOwner varchar2(80); -- это параметр, содержащий имя схемы
  pTable varchar2(80); -- это параметр, содержащий имя таблицы
  -- у владельца этой процедуры/функции желателен
  -- грант на просмотр SYS.ALL_TABLES
declare
  vSQL varchar2(2000) := 'drop table ';
  vExists number;
begin
  select count(*) into vExists from sys.all_tables t where t.owner=pOwner and t.table_name=pTable;
  if vExists>0 then
    execute immediate vSQL||pOwner||'.'||pTable;
  end if;
end;

В принципе можно просто выполнить execute immediate, без проверки, а потом ловить ошибку в секции exception блока pl/sql.
Никогда не бойся браться делать то, что делать не умеешь. Помни, ковчег был построен любителем. Профессионалы построили Титаник...
Re[4]: И ещё раз об удалении таблицы в Oracle.
От: Neonix Россия  
Дата: 13.11.02 11:46
Оценка:
Здравствуйте VVP, Вы писали:


VVP>Ладно, блин,

VVP>
VVP>  pOwner varchar2(80); -- это параметр, содержащий имя схемы
VVP>  pTable varchar2(80); -- это параметр, содержащий имя таблицы
VVP>  -- у владельца этой процедуры/функции желателен
VVP>  -- грант на просмотр SYS.ALL_TABLES
VVP>declare
VVP>  vSQL varchar2(2000) := 'drop table ';
VVP>  vExists number;
VVP>begin
VVP>  select count(*) into vExists from sys.all_tables t where t.owner=pOwner and t.table_name=pTable;
VVP>  if vExists>0 then
VVP>    execute immediate vSQL||pOwner||'.'||pTable;
VVP>  end if;
VVP>end;
VVP>

VVP>В принципе можно просто выполнить execute immediate, без проверки, а потом ловить ошибку в секции exception блока pl/sql.

Спасибо. Будем делать
Re[4]: И ещё раз об удалении таблицы в Oracle.
От: Serge Россия  
Дата: 13.11.02 12:46
Оценка:
Здравствуйте VVP, Вы писали:

VVP>Здравствуйте Neonix, Вы писали:


N>>Ну неужели в pl/sql нельзя нормальными средствами это сделать? Не прибегая к обработке ошибок? Не поверю


VVP>Ладно, блин,

VVP>
VVP>  pOwner varchar2(80); -- это параметр, содержащий имя схемы
VVP>  pTable varchar2(80); -- это параметр, содержащий имя таблицы
VVP>  -- у владельца этой процедуры/функции желателен
VVP>  -- грант на просмотр SYS.ALL_TABLES
VVP>declare
VVP>  vSQL varchar2(2000) := 'drop table ';
VVP>  vExists number;
VVP>begin
VVP>  select count(*) into vExists from sys.all_tables t where t.owner=pOwner and t.table_name=pTable;
VVP>  if vExists>0 then
VVP>    execute immediate vSQL||pOwner||'.'||pTable;
VVP>  end if;
VVP>end;
VVP>

VVP>В принципе можно просто выполнить execute immediate, без проверки, а потом ловить ошибку в секции exception блока pl/sql.


а так ?
Function IsTableExist (i_TableName in varchar2) return number is
  res Number := 0;
begin
   select count(*) into res from user_tables where table_name = UPPER(i_TableName);
   return res;
end;
Re: И ещё раз об удалении таблицы в Oracle.
От: Аноним  
Дата: 14.11.02 05:21
Оценка:
Здравствуйте Neonix, Вы писали:

N>Просьба сразу не пинать ногами и не плеваться в сторону MS SQL'овских программистов.

N>Данный вопрос уже задавался
N>(http://www.rsdn.ru/forum/Message.aspx?mid=125123&only=1
Автор: balabolin
Дата: 04.11.02
), а ответа я так и не получил...


N>Данная проблема действительно стоит и она возникла не из-за неправильной логики программы


N>Так как же удалить таблицу если она существует? Т.е. что то вроде if exist... drop table



Можно просто DROP TABLE t_namе
И никаких проблем(у меня по крайней мере не было)
Re[2]: И ещё раз об удалении таблицы в Oracle.
От: VVP Россия http://web.icq.com/whitepages/online?icq=67524421&img=567524421
Дата: 14.11.02 09:40
Оценка:
Здравствуйте Аноним, Вы писали:

А>Можно просто DROP TABLE t_namе

А>И никаких проблем(у меня по крайней мере не было)

PL/SQL блоки (анонимные, процедуры/фукнкции, пакеты) не позволяют явным образом вызывать операторы DDL (data defenition language), к которым относиться оператор DROP TABLE.
Никогда не бойся браться делать то, что делать не умеешь. Помни, ковчег был построен любителем. Профессионалы построили Титаник...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.