Читаем Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ полностью

Иногда бывает нужным произвести изменение столбца, которое нельзя совершить с помощью ALTER TABLE. Примером может быть случай, когда столбец, хранящий международные элементы языка, имеет набор символов NONE, который нужно заменить на другой набор символов, чтобы исправить ошибку проектирования, или телефонный номер, определенный вначале кем-то как целое, нужно заменить на 18-символьный столбец.

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

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

1. Добавьте в таблицу временный столбец с теми атрибутами, которые вам нужны.

ALTER TABLE PERSONNEL

ADD TEMP_COL VARCHAR (18) ;

COMMIT;

2. Скопируйте данные из столбца, который вы будете изменять, во временный столбец, преобразовывая их соответствующим образом (например, изменяя набор символов для конвертирования текстовых данных в правильный набор символов или, как в нашем примере, выполняя преобразование).

UPDATE PERSONNEL

SET TEMP_COL = CAST(TEL_NUMBER AS VARCHAR(18))

WHERE TEL_NUMBER IS NOT NULL;

COMMIT;

3. После проверки того, что данные во временном столбце были изменены, как планировалось, удалите старый столбец.

ALTER TABLE PERSONNEL DROP TEL_NUMBER;

4. Создайте "новый" столбец, с тем же именем, как и тот, который вы только что удалили, и с теми же атрибутами, что и у временного столбца.

ALTER TABLE PERSONNEL

ADD TEL_NUMBER VARCHAR (18);

5. Скопируйте данные во вновь созданный столбец.

UPDATE PERSONNEL

SET TEL_NOMBER = TEMP_COL WHERE TEMP_COL IS NOT NULL;

COMMIT;

6. После проверки того, что данные во вновь созданном столбце правильные, удалите временный столбец. Если хотите, вы можете также переместить пересозданный столбец на его старую позицию.

ALTER TABLE PERSONNEL

DROP COLUMN TEMP_COL,

ALTER TEL_NUMBER POSITION 6;

COMMIT;

<p>Удаление таблицы</p><empty-line></empty-line><subtitle>DROP TABLE</subtitle>

Используйте оператор DROP TABLE для удаления таблицы и ее данных из базы данных.

Это полное удаление, оно не может быть отменено после подтверждения транзакции.

DROP TABLE имя;

Следующий оператор удаляет таблицу PERSONNEL:

DROP TABLE PERSONNEL;

<p>RECREATE TABLE</p>

Иногда бывает нужно удалить таблицу и снова создать ее "с нуля". Для таких случаев Firebird имеет оператор RECREATE TABLE, который делает следующее:

* удаляет существующую таблицу и все принадлежащие ей объекты;

* подтверждает изменения;

* создает новую таблицу в соответствии с указанной спецификацией.

Синтаксис

Синтаксис RECREATE TABLE идентичен синтаксису оператора CREATE TABLE. Просто замените ключевое слово CREATE на RECREATE.

! ! !

ВНИМАНИЕ! Убедитесь, что вы сохранили исходные тексты триггеров, ключей и индексов этой таблицы до выполнения запроса RECREATE TABLE!

. ! .

Ограничения и рекомендации

Если при выполнении оператора DROP или RECREATE таблица находится в использовании, запрос не будет выполнен, появится сообщение "Object xxxxx is in use" (Объект xxxxx используется).

Всегда выполняйте резервное копирование перед любыми действиями, изменяющими метаданные.

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

<p>Временные таблицы</p>

Firebird не поддерживает временные таблицы, которые управляются системой. Здесь они меньше нужны, чем в других СУБД. Например, у Firebird есть возможность получать виртуальные таблицы напрямую через хранимую процедуру, написанную с использованием специального синтаксиса. Более подробно об этом см. разд. "Хранимые процедуры выбора" в главах 29 и 30.

<p>Постоянные "временные" таблицы</p>

Популярная модель хранения временных данных для доступа приложений - определить постоянную структуру данных, которая включает "идентификатор сессии" или "идентификатор пакета", получающие значение от генератора, или, в Firebird 1.5,

значение CURRENT_TRANSACTION. Приложения могут добавлять, обрабатывать и удалять строки из такой таблицы в процессе решения задачи. Запомните, что Firebird не блокирует таблицы в нормальных ситуациях.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных