[FireBird] Как реорганизовать таблицу?
От: sushko Россия  
Дата: 07.06.15 21:46
Оценка:
По некоторым причинам хочу реорганизовать таблицу MYTABLE следующим образом:

1. CREATE TABLE mytable_temp
2. INSERT INTO mytable_temp SELECT * FROM mytable
3. DROP TABLE mytable
4. CREATE TABLE mytable
5. INSERT INTO mytable SELECT * FROM mytable_temp
6. DROP TABLE mytable_temp

Долбаный FireBird никак не хочет выполнять эту последовательность действий:

— на этапе 2 говорит TABLE DOES NOT EXIST
— на этапе 3 говорит TABLE mytable IS IN USE
— на этапе 4 говорит TABLE mytable ALREADY EXISTS
— на этапе 6 говорит TABLE mytable_temp IS IN USE

Время от времени (а такого рода скрипты мне приходится писать довольно часто, несколько раз в год) чисто шаманскими действиями мне удается убедить его таки сделать то, что я хочу. В главных шаманских действиях числится втыкание COMMIT'а после шагов 2,3,5, либо втыкание туда же каких-то других запросов (чаще всего DDL, хотя не факт), а в этот раз ну ничегошеньки не помогает.

Вопрос: как правильно исполнять такие скрипты на FB? Что нужно делать для того, чтобы избежать описанных проблем в случае <DROP TABLE сразу после SELECT> и <CREATE TABLE сразу после DROP TABLE>?

Скрипты исполняются из C++ного кода через native API, FB 2.5 classic server.
Бесплатный генератор отчетов для программ на C/C++
http://www.oxetta.com
Отредактировано 07.06.2015 21:48 sushko . Предыдущая версия . Еще …
Отредактировано 07.06.2015 21:47 sushko . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.