Как удалить таблицу firebird в процедуре
ALTER TABLE EMPLOYEE
ADD CONSTRAINT UQ_PHONE_EXT UNIQUE(PHONE_EXT);
ALTER TABLE PERSONNEL
ADD TEMP_COL VARCHAR (18) ;
SET TEMP_COL = CAST(TEL_NUMBER AS VARCHAR(18))
WHERE TEL_NUMBER IS NOT NULL;
ALTER TABLE PERSONNEL DROP TEL_NUMBER;
ALTER TABLE PERSONNEL
ADD TEL_NUMBER VARCHAR (18);
SET TEL_NOMBER = TEMP_COL WHERE TEMP_COL IS NOT NULL;
Сохраненная процедура пакетного удаления в Firebird
Firebird с драйвером .net — удалить таблицу, если существует
Dynamic SQL Error SQL error code = -104 Token unknown — line 1, column 27
Firebird обрезать таблицу / удалить все строки
Я использую Firebird 2.5.1 Embedded. Я сделал как обычно, чтобы очистить таблицу почти с 200 тыс. Строк:
Вот результат, видите, это занимает 16 секунд, что, в общем, недопустимо.
Firebird не имеет ключевого слова TRUNCATE. Поскольку в запросе используется ПЛАНИРОВАНИЕ НАТУРАЛЬНОГО, я попытался ПЛАНИРОВАТЬ запрос вручную, вот так:
Но Firebird говорит: «SZAFKI_PK нельзя использовать в указанном плане» (это первичный ключ). Вопрос в том, как эффективно очистить таблицу? Падение и воссоздание невозможно.
3 ответа
Ответ основан на моем комментарии
Вы можете попробовать использовать DELETE FROM SZAFKI WHERE ID > 0 (при условии, что ID равно 1 или выше). Это заставит Firebird искать строки, используя индекс первичного ключа.
Мое первоначальное предположение заключалось в том, что это будет хуже, чем неиндексированное удаление. При неиндексированном удалении выполняется последовательное сканирование всех страниц данных таблицы и удаление строк (то есть создание новой версии записи, которая является удаленной пустой записью). Когда вы используете индекс, он будет искать строки в порядке индекса, это приведет к случайному обходу страниц данных (при условии высокого уровня фрагментации данных из-за большого количества версий записей из-за вставок, удалений и обновлений). Я ожидал, что это будет медленнее, но, вероятно, это приведет к тому, что Firebird будет читать только соответствующие страницы данных (с версиями записей, относящимися к транзакции), а не все страницы данных таблицы.
К сожалению, в текущих версиях Firebird нет быстрого способа массового удаления всей (большой) таблицы. Вы можете ожидать еще более высоких задержек, когда «удаленное содержимое» будет собрано мусором (запустите select * в таблице после подтверждения удаления, и вы увидите). Вы можете попробовать деактивировать индексы в этой таблице перед удалением и посмотреть, поможет ли это. Если вы используете таблицу как временное хранилище, я предлагаю вам использовать функцию GTT.
Как удалить таблицу firebird в процедуре
Как подключить таблицу базы данных Access к проекту?
Как подключить таблицу базы данных аксес к проэкту ?
DROP TABLE
Как удалить таблицу firebird в процедуре
Как удалить таблицу firebird в процедуре
ALTER TABLE EMPLOYEE
ADD CONSTRAINT UQ_PHONE_EXT UNIQUE(PHONE_EXT);
ALTER TABLE PERSONNEL
ADD TEMP_COL VARCHAR (18) ;
SET TEMP_COL = CAST(TEL_NUMBER AS VARCHAR(18))
WHERE TEL_NUMBER IS NOT NULL;
ALTER TABLE PERSONNEL DROP TEL_NUMBER;
ALTER TABLE PERSONNEL
ADD TEL_NUMBER VARCHAR (18);
SET TEL_NOMBER = TEMP_COL WHERE TEMP_COL IS NOT NULL;
Сохраненная процедура пакетного удаления в Firebird
Firebird с драйвером .net — удалить таблицу, если существует
Dynamic SQL Error SQL error code = -104 Token unknown — line 1, column 27
1.8. Подключение базы данных Firebird
Для того, чтобы подключить базу данных, необходимо запустить IBExpert – Пуск/Программы/ НК-SoftWare/ IBExpert/ IBExpert.
После загрузки IBExpert слева на экране отображается дерево объектов, на дереве выделяют нужную базу данных, затем выбирают пункты меню — База данных/ Подключиться к базе. Аналогично производится и отключение базы данных (рис. 1.14).

Рис. 1.14. Подключение к БД
После этого на дереве появляется подключенная база данных и ее объекты, в том числе таблицы, с которыми можно работать (рис. 1.15).

Рис. 1.15. Вид подключенной БД
1.9. Создание и редактирование таблиц Firebird
Для создания таблицы выбирают пункты меню — База данных/ Новая таблица. Справа появляется форма, в которой выбирают вкладку Поля. В эту форму вводят описания полей (рис. 1.16). Для описания каждого поля задают следующее:
— имя поля, все буквы прописные английские;
— тип данных выбирают из списка;
— для текстовых полей задают длину (количество символов);
— можно указать, что поле не должно быть пустым;
— символом Ключ на стандартной панели определяют ключевое поле;
— кнопкой Компиляция сохраняют таблицу.
Рисунок 1.16 – Поля для ввода описания структуры таблицы
Для редактирования описания таблицы необходимо нужную таблицу открыть в режиме изменения таблицы (на дереве объектов вызывают на таблице контекстное меню, где выбирают пункт Изменить таблицу).
В появившемся дополнительном окне выбирают вкладку Поля.
Для изменения существующего поля на данном поле вызывают контекстное меню и выбирают пункт «Изменить поле» (рис. 1.17).

Рис. 1.17. Редактирование поля в таблице
Для удаления существующего поля на данном поле вызывают контекстное меню и выбирают пункт «Удалить поле».
Для добавления нового поля вызывают контекстное меню на любом поле и выбирают пункт «Новое поле» (рис. 1.18).

Рис. 1.18. Добавление нового поля в таблицу
В строке Имя поля вводят имя поля, затем щелкают по кнопке Тип поля. Открывается дополнительный список для выбора типа поля (рис. 1.19).

Рис. 1.19. Окно для задания нового имени поля и его типа
1.10. Связи между таблицами Firebird
Для установки связей между таблицами поступают следующим образом.
Открыть в режиме редактирования подчиненную таблицу (на дереве объектов на имени таблицы вызывают контекстное меню и выбирают пункт «Изменить таблицу»).
Выбрать для таблицы вкладку «Ограничения», а затем вкладку «Внешние ключи».
В открывшейся форме выбирают поле для связи (колонка На поле), имя внешней таблицы из списка, внешнее поле из списка, устанавливают правило обновления (например, Cascade), правило удаления, затем щелкают по кнопке «Компиляция» для сохранения произведенных изменений.
Вид формы для установки связи с главной таблице приведен на рис. 1.20.

Рис. 1.20. Окно для установки связей в таблицах
1.11. Перенос базы данных на другой компьютер
Исходные файлы базы данных имеют расширение .gdb. При переносе базы данных на другой компьютер необходимо:
— скопировать файлы с названием базы данных на новый компьютер (например, на диск С:/);
— запустить сервер Firebird 2.0, выбрать меню Пуск/ Настройка/ Панель управления/ Firebird 2.0 Server Manager, нажать кнопку Старт, если она не активна, и запустить сервер;
— необходимо запустить базу данных, используя пункты меню Пуск/ Программы/ HK-Software/ IBExpert; после запуска данной программы необходимо выбрать пункт меню База данных/ Регистрация базы данных/ Выбрать файл базы данных/ Ввести имя пользователя и пароль/ Нажать кнопку Регистрация;
— выбрать зарегистрированный файл и выбрать пункты меню База данных/ Подключится к базе.
Для того, чтобы база данных взаимодействовала с приложение, необходимо приложение поместить в тоже место, где расположен файл базы данных (например, на диск С:/), в этом случае приложение будет работать корректно.
1.12. Создание меню приложения
Создание меню приложения осуществляется следующим образом.
1. Запустить Delphi (Пуск, Программы, Borland Delphi, Delphi). Автоматически откроется форма 1.
2. На панели компонентов перейти во вкладку Standard, выбрать компоненту Mainmenu и поместить ее на форму.
3. На компоненте вызывают контекстное меню и выбирают пункт Menu Designer…. Открывается диалоговое окно, в котором формируют элементы меню. Для текущего элемента меню необходимо задать подпись.
4. На панели Object (Инспектора объектов) в поле Caption набирают название текущего пункта меню (например, Редактирование) и нажимают клавишу Enter.
5. Выделяют новый пункт меню (пустой), появившийся справа, и повторяют действия п. 4.
6. Для создания меню второго уровня выделяют щелчком пункт меню первого уровня и нажимают на клавиатуре стрелку вниз. В поле Caption вносят название пункта и нажимают клавишу Enter. Эти действия повторяют для каждого пункта меню второго уровня (рис.1.21).
7. После создания меню закрывают окно Menu Designer и сохраняют форму. Для сохранения выбирают пункты меню File, Save All, выбирают папку, где должны сохраняться модули.
Почему временная таблица не разрешена в хранимой процедуре в Firebird?
Я пытаюсь создать временную таблицу в хранимой процедуре в базе данных Firebird.
список хранимых процедур:
каждый раз, когда я пытаюсь создать эту процедуру, я получаю ошибку:
что я делаю неправильно? Firebird 3.0 RC
3 ответов
Firebird не позволяет использовать DDL внутри хранимых процедур, поэтому CREATE операторы запрещены в PSQL. Как указано в ответ lad2025 вы можете обойти это ограничение с помощью EXECUTE STATEMENT .
однако, идея за глобальные временная таблица это то, что вы создаете его один раз, и они продолжают существовать, чтобы их можно было использовать позже. Данные видны только для соединения, создавшего данные, и данные удаляются после фиксации транзакции ( ON COMMIT DELETE ROWS ) или связи закрыть ( ON COMMIT PRESERVE ROWS ) в зависимости от типа глобальной временной таблицы.
из обновления ссылки на язык:
глобальные временные таблицы имеют постоянные метаданные, но их содержимое связано с транзакциями (по умолчанию) или подключением. Каждая транзакция или соединение имеет свой собственный экземпляр GTT, изолированный от всех остальных. Экземпляры создаются только в том случае, если ГЦГ ссылается и уничтожается при завершении транзакции или отключении.
поэтому вместо того, чтобы пытаться создать глобальную временную таблицу внутри хранимой процедуры, сначала создайте ее, а затем создайте хранимую процедуру, которая использует уже определенный GTT.
СОЗДАТЬ ГЛОБАЛЬНУЮ ВРЕМЕННУЮ ТАБЛИЦУ
— это обычный оператор DDL, который обрабатывается обработчиком так же, как обрабатывается оператор CREATE TABLE. соответственно, он не можно создать или удалить GTT в хранимой процедуре или триггере.
можно использовать Dynamic-SQL и обернуть ваш код EXECUTE STATEMENT as решение:
чтобы уточнить другие приведенные выше правильные ответы, я использую временные таблицы в основном для проблем производительности, например, когда у меня есть параметризованное подмножество данных, которое должно быть запросом против большего набора, такого как:
где GTT$IDS заполняется подмножеством ID.
иногда, для очень сложных процедур, я должен использовать несколько временных таблиц, поэтому я создаю их в метаданных (вне операторов PSQL, конечно), как Итак:
Это может быть упрощенно для некоторых продвинутых SQL’ERS, но это имеет для меня наибольший смысл (переносить технику из моих дней dBase/VFP), и это очень быстро по сравнению с кучей сложных соединений.
Я никогда не тратил время, чтобы узнать, как использовать предложение «план» (или заставить его работать правильно), поэтому в основном я использую этот метод для создания плана через код, когда я получаю медленные запросы, если это имеет смысл.
Как удалить таблицу firebird в процедуре
Как подключить таблицу базы данных Access к проекту?
Как подключить таблицу базы данных аксес к проэкту ?
DROP TABLE
Как удалить таблицу firebird в процедуре
Как удалить таблицу firebird в процедуре
ALTER TABLE EMPLOYEE
ADD CONSTRAINT UQ_PHONE_EXT UNIQUE(PHONE_EXT);
ALTER TABLE PERSONNEL
ADD TEMP_COL VARCHAR (18) ;
SET TEMP_COL = CAST(TEL_NUMBER AS VARCHAR(18))
WHERE TEL_NUMBER IS NOT NULL;
ALTER TABLE PERSONNEL DROP TEL_NUMBER;
ALTER TABLE PERSONNEL
ADD TEL_NUMBER VARCHAR (18);
SET TEL_NOMBER = TEMP_COL WHERE TEMP_COL IS NOT NULL;
Сохраненная процедура пакетного удаления в Firebird
Firebird с драйвером .net — удалить таблицу, если существует
Dynamic SQL Error SQL error code = -104 Token unknown — line 1, column 27