Удалить таблицу из базы данных Oracle, если таблица существует в инструкции sql

Мне нужно использовать оператор SQL, чтобы удалить таблицу, она выйдет из строя, если таблица не существует. Можно ли использовать оператор IF для удаления таблицы s.executeUpdate("DROP TABLE employee");


person user3500109    schedule 05.04.2014    source источник
comment
Вы делаете это из блока PLSQL?   -  person mason    schedule 05.04.2014


Ответы (5)


Oracle не поддерживает такую ​​конструкцию, как drop table if exists my_table, которая, по-видимому, является допустимым синтаксисом в MySQL (и, возможно, в других СУБД).

В .SQL скрипте, где вы запускаете DDL для DROP и / или CREATE различных объектов, стандарт Oracle заключается в том, чтобы удалить объект и игнорировать ошибку в тех случаях, когда объект не существует. Если хотите, вы можете написать код, чтобы проверять, существует ли объект (см. DBA_OBJECTS представление), чтобы удалить его только в том случае, если он существует.

из s.executeUpdate, я так понимаю, что вы делаете это на Java? Если бы это был я, я бы просто отбросил и проигнорировал любую несуществующую ошибку.

Надеюсь, это поможет.

person Mark J. Bobak    schedule 05.04.2014

предполагая, что у вас есть необходимые разрешения, вы можете сделать что-то вроде следующего

declare var_count int;
select count(*) INTO var_count
from all_tables where OWNER = [schema] and table_name = "EMPLOYEE";
if var_count > 0 then
begin
drop table employee;
end  

адаптируйтесь соответствующим образом, если вы делаете это во внешнем коде, а не в процедуре pl / sql.

person user158017    schedule 05.04.2014

Традиционно в pl / sql вы можете указать раздел исключения в блоке и перехватить исключение, если таблица не удаляется.

См. Обработку ошибок Oracle

person EvilTeach    schedule 05.04.2014

Это решит вашу проблему, когда таблица не существует, ошибка не будет выдана.

Сотрудник BEGIN DROP TABLE; ИСКЛЮЧЕНИЕ, КОГДА ДРУГИЕ ТОГДА NULL; КОНЕЦ;

person user2302449    schedule 06.04.2014
comment
Вам действительно стоит проверить, действителен ли синтаксис .... - person Mark J. Bobak; 14.04.2014

Я бы использовал следующий код:

s.executeUpdate("DROP TABLE IF EXISTS employee")

Но в зависимости от ваших версий вы также можете использовать это:

IF OBJECT_ID('dbo.employee', 'U') IS NOT NULL
DROP TABLE dbo.employee

Ответ взят из: здесь, также это кажется, это может быть дубликат того же поста? Я очень, очень рекомендую прочитать документацию по SQL и попытаться провести дополнительные исследования перед публикацией, но я вижу, что вы новичок, обязательно прочитайте правила публикации здесь, на StackOverFlow.

person Steve Byrne    schedule 05.04.2014
comment
Вопрос касается Oracle, а не SQL Server. - person Mark J. Bobak; 05.04.2014
comment
... если таблица существует в выражении sql, я просто подумал, что вопрос под названием отразит то, что пользователь хотел узнать? - person Steve Byrne; 05.04.2014