По некоторым причинам хочу реорганизовать таблицу 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.