Как удалить все таблицы из базы данных Firebird 3.0 с помощью одного запроса?

Я работаю над приложением JSF, которое использует базу данных Firebird 3.0, содержащую сотни таблиц. Мне нужно время от времени удалять все таблицы.

Я проверил этот запрос:

DROP TABLE TABLE_NAME

но только одна таблица может быть удалена за раз с помощью этого запроса, и это очень много времени для программы, могу ли я найти другой подход, чтобы отбить ее?


person Nitin Upadhyay    schedule 10.05.2019    source источник
comment
Вам действительно нужно ответить на вопрос, почему, потому что это действительно звучит как ошибочный подход. Если вам действительно нужно регулярно удалять все таблицы, то вам лучше удалить всю базу данных и создать новую пустую из резервной копии или использовать другой подход к управлению своими данными. Потому что удаление всех ваших таблиц довольно странно.   -  person Mark Rotteveel    schedule 10.05.2019
comment
Да @MarkRotteveel, удаление всей базы данных также может быть решением. но не могли бы вы сообщить мне, если я использую Spring Boot + Hibernate с базой данных Firebird, то как я могу упомянуть createDatabaseIfNotExist, например MySql. Так как мне нужно автоматически создавать базу данных при загрузке для весеннего проекта.   -  person Nitin Upadhyay    schedule 10.05.2019
comment
Прямого эквивалента (пока) нет, но вы можете использовать org.firebirdsql.management.FBManager, чтобы создать для вас базу данных.   -  person Mark Rotteveel    schedule 10.05.2019


Ответы (1)


Вы можете создать процедуру, в которой удаляются таблицы

create or alter procedure PRC_DROP_TABLES
 as
declare variable TBL varchar(50);

begin
 for select r.rdb$relation_name
     from rdb$relation_fields r
     where
     r.rdb$system_flag=0 and r.rdb$view_context is null
     -- and   r.rdb$relation_name not containing  '$' --uncomment and modify this if you what filter tables by condition 
     group by   r.rdb$relation_name
     into :tbl do
     execute statement  'drop table '||:tbl;
end
person Konstantin Streletsky    schedule 10.05.2019