Форум: "Базы";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];
ВнизСохранение файла-документа в таблице Oracle v8 Найти похожие ветки
← →
VS2002 (2003-01-29 03:13) [0]Необходимо сохранять содержимое файла (Word, Excel и т.д.) в таблице Oracle v8. В документации по Oracle приводятся разные типы данных, позволяющие сделать это: BLOB, RAW, LONG RAW.
Вопрос:
1. В чем принципиальное отличие в использовании этих типов данных?
2. Как сохранить/извлечь данные из данных полей?
← →
AlexVit (2003-01-29 08:01) [1]Вот выдержки из Руководства пользователя по PL/SQL для Oracle:
LONG
----
Вы используете тип данных LONG для хранения символьных строк
переменной длины. Тип данных LONG подобен типу данных VARCHAR2,
с тем отличием, что максимальная длина значения LONG составляет
32760 байт.
Вы можете вставлять любое значение LONG в столбец базы данных
LONG, ибо максимальная ширина столбца LONG составляет 2147483647
байт. Однако вы не можете выбирать значение длиннее 32760 байт
из столбца LONG в переменную LONG.
Столбцы LONG могут хранить текст, массивы символов, или даже
небольшие документы. Вы можете обращаться к столбцам LONG в
предложениях UPDATE, INSERT и большинстве предложений SELECT, но
НЕ в выражениях, вызовах функций или некоторых фразах SQL, таких
как WHERE, GROPU BY и CONNECT BY. Для дополнительной информации
обратитесь к документу ORACLE7 Server SQL Language Reference
Manual.
RAW
---
Вы используете тип данных RAW для хранения двоичных данных или
байтовых строк. Например, в переменной RAW можно было бы
хранить последовательность графических символов или оцифрованное
изображение. Данные RAW напоминают символьные данные, с той
разницей, что PL/SQL не интерпретирует данных RAW. Аналогично,
ORACLE не выполняет никаких преобразований кодового множества,
когда вы передаете данные RAW из одной системы в другую.
Тип данных RAW принимает обязательный параметр, который
позволяет вам специфицировать максимальную длину (вплоть до
32767 байт). Синтаксис имеет следующий вид:
RAW(максимальная_длина)
Для спецификации максимальной длины нельзя использовать
константу или переменную; вы должны использовать целочисленный
литерал.
Хотя максимальная длина переменной RAW составляет 32767 байт,
максимальная ширина столбца базы данных типа RAW равна 255 байт.
Поэтому вы не можете вставлять в столбец RAW значения длиннее
255 байт. Вы можете вставлять значения RAW в столбец базы
данных LONG RAW, ибо максимальная ширина столбца LONG RAW
составляет 2147483647 байт. Однако вы не можете выбирать
значение длиннее 32767 байт из столбца LONG RAW в переменную
RAW.
2-14 Руководство пользователя и справочник по PL/SQL
LONG RAW
--------
Вы используете тип данных LONG RAW для хранения двоичных данных
или байтовых строк. Тип данных LONG RAW подобен типу данных
LONG, с тем отличием, что данные LONG RAW не интерпретируются
PL/SQL. Максимальная длина значения LONG RAW составляет 32760
байт.
Вы можете вставлять любое значение LONG RAW в столбец базы
данных LONG RAW, ибо максимальная ширина столбца LONG RAW
составляет 2147483647 байт. Однако вы не можете выбирать
значение длиннее 32760 байт из столбца LONG RAW в переменную
LONG RAW.
← →
roottim (2003-01-29 08:23) [2]word,exel - в BLOB
← →
danilka (2003-01-29 08:42) [3]я делаю что-то типа:
Stream := TFileStream.Create("xxx.exe",fmOpenRead);
updateQuery.SQL.Add("update TABLE_NAME set BLOB_FIELD_NAME = empty_blob() where FILE_NAME = "#39"xxx.exe"#39);
updateQuery.SQL.Add("returning BLOB_FIELD_NAME into :fp");
updateQuery.ParamByName("fp").LoadFromStream(Stream, ftOraBlob);
updateQuery.ExecSQL;
TABLE_NAME - имя таблицы
BLOB_FIELD_NAME - имя блоб-поля, где лежат данные
условие where должно возвращать только одну запись.
На вьюхах не проходит :))
Может можно и проще, но меня и так устраивает.
← →
danilka (2003-01-29 08:44) [4]да, и еще, если работаешь через бде, то надо в алиасе "blob size" сделать больше чем файл который будешь писать в базу (в килобайтах) :)
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.02.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.015 c