Firebird external tables

Файрберд может сохранять таблицы в виде внешних текстовых файлов.
Файлы будут с  записями ФИКСИРОВАННОЙ длины, никаких VARCHAR, массивов и BLOB, а лучше всего вообще все поля CHAR, а то мозг вывихнешь. Файлы csv также не предусмотрены.

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

над полученными внешними таблицами можно выполнять только операции INSERT и SELECT. Если удалить таблицу в БД — файл не удаляется.

проверить сие можно например таким образом — создаем внешнюю таблицу, записываем в нее пару строк данных, удаляем таблицу — файл остался на диске.  Если после этого создать точно такую же таблицу — она будет «чудесным образом» уже заполнена данными.

если указать имя файла без пути — файрберд замечательно создаст ее в windows/system32

Еще один прикол — файрберд не подставляет автоматом символы конца строки в файл внешней таблицы. Для того чтоб он все-таки был — надо сделать дополнительное поле в таблице на 2 символа (ну, для Windows два символа) и занести их туда.

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

самый простой вариант таблицы такой:

CREATE TABLE NEW_TABLE EXTERNAL 'F:\TEST' (
ID CHAR(5),
NAME CHAR(40),
CRLF CHAR(2)
);

и к ней триггер:

SET SQL DIALECT 3;
SET TERM ^ ;
CREATE OR ALTER TRIGGER TR_BI_NEW_TABLE FOR NEW_TABLE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
NEW.CRLF = ASCII_CHAR(13) || ASCII_CHAR(10);
END
^
SET TERM ; ^

снаружи получится текстовый файл, который можно при желании открыть Excel или OpenOffice, ну или еще как-то обработать.

читать:
http://www.ibase.ru/files/firebird/langref25rus/index.html#langref25-ddl-table

 

 

 

 

Добавить комментарий