У меня есть скрипт, в котором я создаю временную таблицу, которую впоследствии хочу удалить.
Я просто создаю таблицу, заполняю ее с помощью оператора INSERT INTO, но когда дело доходит до ее удаления, сценарий не сообщает, что таблица используется.
Судя по чтению, это может быть вызвано управлением транзакциями, но я немного запутался.
Вот небольшой скрипт, который воспроизводит проблему:
CREATE TABLE SCRIPT_TEMP (
NAME VARCHAR(100) NOT NULL,
USERNAME VARCHAR(150) NOT NULL);
COMMIT WORK;
INSERT INTO SCRIPT_TEMP (NAME, USERNAME)
SELECT NAME, COALESCE(USERNAME, 'empty')
FROM SALESREPS;
COMMIT WORK;
DROP TABLE SCRIPT_TEMP;
COMMIT WORK;
Или, чтобы его было легко протестировать любому, у кого нет таблицы SALESREPS, используйте этот оператор вставки :o)
INSERT INTO SCRIPT_TEMP (NAME, USERNAME)
SELECT 'Name 1', 'Username 1'
FROM RDB$DATABASE;
COMMIT WORK;
Я не вижу, что еще содержит ссылку на таблицу SCRIPT_TEMP к моменту выполнения вызова отбрасывания. Почему собственная транзакция скрипта блокирует ее даже после второго COMMIT?
Если я разделю выполнение на 2 скрипта, все в порядке.
Что мне не хватает??
Спасибо!!
PS: использую Firebird 2.5.2, если это имеет значение
PPS: мой сценарий немного сложнее, чем этот. Временная таблица заполнена именами таблиц и соответствующими ограничениями, которыми нужно манипулировать, но проблема не в этом, эта часть работает хорошо. И дело в том, что проблему, которую я хочу решить, легко воспроизвести с помощью примера кода, который я получил во время отладки. Этот ТАК вопрос кажется, об одной и той же проблеме, но единственный ответ не помогает самой проблеме