Данные хранятся в поле BYTE или BLOB?
Если данные хранятся в столбце BLOB, вы можете использовать:
SELECT LOTOFILE(blob_column, '/path/to/file/on/client', 'client')
FROM TheTable
WHERE PK_Column = 23411 -- PK value
Если данные хранятся в столбце BYTE, вам придется работать довольно усердно. Если на вашем компьютере установлен ESQL / C (ClientSDK) и компилятор C, я рекомендую получить SQLCMD из IIUG Software Archive и распаковать программное обеспечение. Вам нужен набор среды Informix, и вы должны иметь возможность компилировать программы на Си. Затем запустите:
./configure --prefix=$HOME/bin
Неважно, что вы указываете в качестве префикса - вам просто нужно запустить скрипт настройки.
Затем вы можете скомпилировать все (make
) или просто скомпилировать программу selblob
(make selblob
). Эта программа - то, что я называю «виньеткой»; Микроскопическая программа, которая показывает, как выбрать BLTE BLOB-объект на диск. Это, однако, также полностью функциональным; он будет работать практически со всем, что вы на него бросите, или диагностирует ошибку.
Если ваша база данных называется precious
, байтовые данные находятся в таблице byte_table
, столбец, содержащий данные, - byte_column
, а столбцы первичного ключа - col1
(и требуемое значение * 1022. *) и col2
(и требуемое значение "Habeas Corpus"
), тогда вы можете запустить:
selblob -d precious -t byte_table -k col1=23 -k col2="Habeas Corpus" \
-c byte_column -f output_file
Это выгрузит значение байта в указанный файл.
Если у вас нет ESQL / C или компилятора C или разрешения на их использование, тогда жизнь сложнее. Наиболее близким подходом является использование оператора UNLOAD в DB-Access:
dbaccess precious - <<!
unload to "output_file"
select byte_column from byte_table where col1 = 23 and col2 = 'Habeas Corpus';
!
Это создаст файл, содержащий шестнадцатеричный дамп байтового значения (2 байта на символ). Затем вам нужно обработать файл, чтобы преобразовать гекс в обычные данные. Обратите внимание, что если столбец был столбцом TEXT, а не столбцом BYTE, преобразование не требуется. Вы можете использовать довольно простой Perl-скрипт для выполнения преобразования (при условии, что файл достаточно мал, чтобы его можно было сохранить в памяти - вам придется работать усерднее, если он недостаточно мал):
perl -w -e '
$/ = "";
my $data = <>;
while (length($data) > 1)
{
my $hex = substr($data, 0, 2);
printf "%c", hex($hex);
$data = substr($data, 2);
}' <output_file
Условие длины указывает '> 1
' для работы с новой строкой в конце выгруженных данных.
(Из-за «истерического изюма», то есть «исторических причин», я по-прежнему называю и BYTE, и TEXT «типами BLOB-объектов», хотя в IDS 9.00 введены явные имена BLOB и CLOB для «умных BLOB-объектов», немного другой пары типы данных с примерно соответствующей функциональностью - в моей книге все они являются типами BLOB-объектов (строчными буквами). Это проблема старых парней, которые узнали о BLTE-объектах и TEXT-объектах в 1990 году, за шесть или более лет до добавления BLOB-объектов и BLOB-объектов. ,
В любом случае, нет хорошей альтернативной официальной терминологии для блобов старого стиля; использование «тупых пятен» не является политически корректным!)