- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри
Шрифт:
Интервал:
Закладка:
Только операции INSERT и SELECT могут быть выполнены над строками внешней таблицы. Попытки изменить или удалить строки вернут ошибки.
Поскольку такие данные располагаются вне базы данных, операции с внешней таблицей не находятся под управлением версиями записей сервера Firebird. Поэтому добавления имеют немедленный эффект и не могут быть отменены (rolled back).
! ! !
СОВЕТ. Если вы хотите, чтобы ваша таблица находилась под управлением транзакции, создайте другую, внутреннюю таблицу Firebird и добавьте данные из внешней таблицы во внутреннюю.
. ! .
Если вы используете DROP DATABASE для удаления базы данных, вы должны также удалить внешний файл - он не будет автоматически удален как результат выполнения DROP DATABASE.
Импорт внешних файлов в таблицы Firebird
Для импорта внешних файлов в таблицы Firebird вначале убедитесь, что у вас установлены соответствующие условия доступа. См. разд. "Конфигурирование внешних размещений"главы 36 относительно параметра сервера ExternairiieAccess.
1. Создайте таблицу Firebird, которая позволит вам просматривать внешние данные. Объявите все столбцы как CHAR. Текстовый файл, содержащий данные, должен находиться на сервере. В следующем примере внешний файл существует в системе UNIX, следовательно, символ EOL занимает 1 байт.
CREATE TABLE EXT_TBL EXTERNAL FILE 'file.txt' (
FNAME CHAR (10) ,
LNAME CHAR(20),
HDATE CHAR(10),
NEWLINE CHAR(1));
COMMIT;
2. Создайте другую таблицу Firebird, которая в итоге будет вашей рабочей таблицей. Включите столбец для символа EOL, если вы позже собираетесь экспортировать данные из внутренней таблицы назад во внешний файл:
CREATE TABLE PERSONNEL (
FIRST_NAME VARCHAR(10),
LAST_NAME VARCHAR(20) ,
HIRE_DATE DATE,
NEW_LINE CHAR(1));
COMMIT;
3. Используя текстовый редактор или приложение, которое может выводить текст фиксированного формата, создайте и заполните внешний файл. Сделайте все записи одинаковой длины, заполняя неиспользуемые символы пробелами, и добавьте символ(n) EOL в конец каждой записи.
Количество символов в строке EOL зависит от платформы - см. предыдущие замечания.
Следующий пример иллюстрирует запись фиксированной длины в 41 символ, b представляет пробел, a n - EOL:
12345678901234567890123456789012345678901
fname. . . . . lname. . . . . . . hdate n
JamesbbbbbStarkeybbbbbbbbbbbbb2004-12-10n
ClaudiobbbValderramabbbbbbbbbb2003-10-01n
4. Оператор SELECT для таблицы EXT_TLB возвращает записи из внешнего файла:
SELECT FNAME, LNAME, HDATE FROM EXT_TBL;
FNAME
LNAME
HDATE
=====
=====
=====
James
Starkey
2004-12-10
Claudio
Valderrama
2003-10-01
5. Добавьте данные в таблицу назначения:
INSERT INTO PERSONNAL
SELECT FNAME, LNAME, CAST( HDATE AS DATE),
NEWLINE FROM EXT_TBL;
COMMIT;
! ! !
ПРИМЕЧАНИЕ. Если вы пытаетесь обратиться к файлу, в то время как он еще открыт другим приложением, эта попытка даст сбой. Обратное также верно, и более того: когда ваше приложение откроет файл как таблицу, он будет недоступен для других приложений, пока ваше приложение не отсоединится от базы данных[46].
. ! .
Теперь, когда вы выполните SELECT для PERSONNEL, данные из вашей внешней таблицы появятся в конвертированной форме:
SELECT FIRST_NAME, LAST_NAME, HIRE_DATE
FROM PERSONNEL;
FIRST NAME LAST NAME HIRE DATE
James Starkey 10-DEC-2004
Claudio Valderrama 01-OCT-2003
Экспорт таблиц Firebird во внешние файлы
Вернемся к примеру в предыдущем разделе. Шаги по экспорту данных в нашу внешнюю таблицу похожи:
1. Откройте внешний файл в текстовом редакторе и удалите в нем все. Выйдите из текстового редактора и снова выполните запрос SELECT к таблице EXT_TBL. Она должна быть пустой.
2. Используйте оператор INSERT для копирования записей Firebird из PERSONNEL во внешний файл file.txt:
INSERT INTO EXT_TBL
SELECT FIRST_NAME, LAST_NAME,
cast (HIRE_DATE AS VARCHAR(ll),
ASCII_CHAR(10) FROM PERSONNEL
WHERE FIRST_NAME LIKE 'Clau%';
3. Теперь выберите данные из внешней таблицы:
SELECT FNAME, LNAME, HDATE FROM EXT_TBL;
FNAME LNAME HDATE
Claudio Valderrama 01-OCT-2004
! ! !
СОВЕТ. Внешняя функция ASCII_CHAR находится в библиотеке ib_udf в каталоге /UDF каталога инсталляции Firebird. Ее объявление может быть найдено в скрипте ib_udf.sql. Об использовании внешних функций см. главу 21.
. ! .
Конвертирование внешних таблиц во внутренние
Можно конвертировать данные из внешних таблиц во внутреннюю таблицу посредством выполнения резервного копирования базы данных с помощью утилиты gbak с переключателем -convert (сокращенно -со). Все внешние таблицы, определенные в базе данных, будут конвертированы во внутренние таблицы при изготовлении резервной копии. В этом случае размещение внешней таблицы не будет сохранено.
Подробную информацию см. в главе 38.
Изменение таблиц
Оператор ALTER TABLE используется для изменения структуры таблицы: добавления, изменения или удаления столбцов или ограничений. При необходимости один оператор может выполнять несколько изменений. Для выполнения ALTER TABLE вы должны быть соединены с базой данных как создатель таблицы (ее владелец), пользователь SYSDBA или (в POSIX) как Суперпользователь.
Изменение таблицы или ее триггеров подсчитывается в специальном счетчике. Каждая таблица может изменяться не более 255 раз, после чего вы должны будете выполнить копирование и восстановление базы данных. При этом счетчик изменений не влияет на переключение триггера в активное или неактивное состояние, как при использовании
ALTER TRIGGER имя-триггера ACTIVE | INACTIVE
! ! !
СОВЕТ. Запланируйте выполнение резервного копирования и восстановления после изменений структур таблиц, если база данных содержит данные. Когда изменяется таблица или столбец, Firebird не выполняет преобразования измененного формата. Для упрощения оперативного изменения метаданных он сохраняет новое описание формата и откладывает преобразование, пока данные нужны. Это могло бы оказать непредвиденное влияние на работу пользователей.
. ! .
Подготовка к выполнению ALTER TABLE
Перед модификацией или удалением столбцов или атрибутов в таблице вам нужно выполнить три дела:
1. Убедитесь, что вы имеете соответствующие привилегии к базе данных.
2. Сохраните существующие данные.
3. Удалите любые ограничения зависимостей в столбце.
Изменение столбцов в таблице
Существующие столбцы в таблице могут быть изменены в нескольких отношениях, а именно:
* имя столбца может быть изменено на другое имя, не используемое в таблице;
* столбец может быть "перенесен" на другую позицию в системе упорядочивания столбцов слева направо;
* возможно преобразование несимвольных данных в символьные с некоторыми ограничениями.
СинтаксисИспользуйте следующий синтаксис для ALTER TABLE:
ALTER TABLE таблица
ALTER [COLUMN] имя-простого-столбца изменение;
изменение = новое-имя-столбца | новый-тип-столбца | новая-позиция-столбца
новое-имя-столбца = ТО имя-простого-столбца
новый-тип-столбца = TYPE тип-данных-или-домен
новая-позиция-столбца = POSITION целое
! ! !
ПРИМЕЧАНИЕ. Если вы пытаетесь переименовать столбец, вы можете неожиданно получить проблемы зависимостей, если на столбец существуют ссылки из ограничений или он используется в просмотрах, триггерах или хранимых процедурах.
. ! .
ПримерыЗдесь мы изменяем имя столбца с EMP_NO на EMP_NUM:
ALTER TABLE EMPLOYEE
ALTER COLUMN EMP_NO TO EMP_NUM;
/* ключевое слово COLUMN необязательно */
Теперь изменяется позиция столбца:
ALTER TABLE EMPLOYEE
ALTER COLUMN EMP_NUM POSITION 4;
В этот раз тип данных EMP_NUM заменяется с INTEGER на VARCHAR (20):
ALTER TABLE EMPLOYEE
ALTER COLUMN EMP_NUM TYPE VARCHAR(20) ;
Ограничения при изменении типа данныхFirebird не позволит вам изменить тип данных столбца или домена, в результате чего могут потеряться данные.
* Новое определение столбца должно позволять использовать существующие данные. Если, например, новый тип данных имеет слишком много байтов, или не поддерживается преобразование типов данных, то возвращается ошибка, и изменения не выполняются.
* Когда числовые типы преобразуются в строковый тип, каждый числовой тип рассматривается как предмет с минимальной длиной в байтах в соответствии с типом (см. рис. 8.1).
* Преобразование символьных данных в несимвольные недопустимо.
* Столбцы массивов и BLOB не могут быть преобразованы.
! ! !
ВНИМАНИЕ! Любые изменения определения полей могут потребовать пересоздания индексов.
. ! .
Удаление столбцов
Владелец таблицы может использовать ALTER TABLE для удаления определения столбца и его данных из таблицы. Удаление столбца приводит к потере всех хранимых в нем данных. Удаление приводит к немедленному эффекту, независимо от других транзакций, работающих с таблицей. В этом случае другая транзакция продолжается без прерывания, a Firebird откладывает удаление до освобождения таблицы.

