BLOB в Oracle9i

 
0
 
Oracle
ava
Anet | 08.01.2005, 22:28




Здравствуйте, расскажите пожалуйста, как показать на экране содержимое документа *.doc, который хранится в поле типа BLOB в БД. Желательно использование PL/SQL.
Заранее благодарна.
Comments (27)
ava
igon | 09.01.2005, 16:20 #
Под *.doc подразумевается документ Microsoft Word?
ИМХО, средствами Oracle посмотреть его не удасться (я ориентируюсь на версию 9.0.1).
Но можно:
1. Сформировать файл в формате MSWord. Как - смотри в документации на Oracle
Oracle COM Automation Feature Developer's Guide
Раздел 4 Oracle COM Automation PL/SQL Demos. Возможно, придется "подправлять" демонстрационные пакеты.
2. При помощи приложения, например, на Java, через JDBC считать нужный BLOB и записать его в файл с расширением .doc
Сформированный в обоих вариантах файл смотреть в MSWord.
К сожалению, готовыми примерами не располагаю :(

И еще: Задача существенно упростится, если ты опишешь, каким способом файл MSWord попадает в BLOB Oracle - извлечение его будет практически зеркальным отражением: Insert-Select, InputStream-OutputStream и т.д.
ava
Anet | 09.01.2005, 19:19 #
Спасибо. Я обязательно попробую.

added later:


Почему при загрузки в BLOB поле через HTML-тег <Textarea></Textarea> возможно отправить только 1558 символов русского текста?
ava
LSD | 09.01.2005, 23:06 #
У меня есть пример полностью на PL/SQL как записать BLOB в файл, но вот как запустить Word я не знаю. Если интерестно могу выложить.
ava
igon | 10.01.2005, 00:29 #
Цитата
У меня есть пример полностью на PL/SQL как записать BLOB в файл, но вот как запустить Word я не знаю. Если интерестно могу выложить


Конечно, интересно - выкладывай :)

Цитата
Почему при загрузки в BLOB поле через HTML-тег <Textarea></Textarea> возможно отправить только 1558 символов русского текста?


HTML вообще не знает, что такое BLOB, так что вопрос о емкости Textarea - Web-программистам (в соседней ветке форума) smile
ava
Anet | 10.01.2005, 21:00 #
Цитата
У меня есть пример полностью на PL/SQL как записать BLOB в файл, но вот как запустить Word я не знаю. Если интерестно могу выложить.




Было бы зодрово. Покажи, пожалуйста, код! :hehe


added later:


iqon, претворила в реальность ваши рекомендации! Работает, только данные в MSWORD записываются в 16-тиричном формате. Наверное надо кодировку сменить?
ava
Anet | 10.01.2005, 21:33 #
уже записала в MSWORD по русски, т.е. просто добавила ...utl_raw.cast_to_varchar2(buffer)...
в нужном месте smile
ava
guest | 10.01.2005, 22:29 #


подскажите, пожалуйста, как можно показать в WEB картинку из того же многострадального поля типа BLOB?
ava
guest | 10.01.2005, 22:30 #
ой, забыла зайти )
ava
Anet | 10.01.2005, 22:34 #

извините за путаницу. Забыла авторизироваться и не заметила.
повторяю вопрос:

Цитата
подскажите, пожалуйста, как можно показать в WEB картинку из того же многострадального поля типа BLOB?

ava
igon | 11.01.2005, 23:08 #
Сохраняешь в файл с соответствующим расширением и в страничку вставляешь ссылку на этот файл
ava
LSD | 13.01.2005, 23:37 #
Извинясь за задержку, не мог найти пример. И похоже я ошибся, записать данные в файл на PL/SQL нельзя. Можно только считать.

declare
data blob;
src_bfile BFILE := bfilename('DEST_DIR', 'data.bin');
dest_offset integer := 1;
src_offset integer := 1;
begin
dbms_lob.fileopen(src_loc, dbms_lob.file_readonly);
dbms_lob.createtemporary(data , true , dbms_lob.call);
dbms_lob.loadblobfromfile(data, src_loc , dbms_lob.lobmaxsize, dest_pos, src_pos);
.....
dbms_lob.fileclose(src_loc);
end;
ava
Anet | 16.01.2005, 20:07 #


Подскажите пожалуйста, как правильно написать команду alter table... ,чтобы переместить таблицу и все ее данные из табличного пространства SYSTEM в табличное пространство USERS(в таблице есть LOB-поля, хранящиеся в tablespace SYSTEM их тоже надо отправить в tablespace USERS)?

added later:


LSD, спасибо за скрипт.
ava
igon | 17.01.2005, 01:34 #
1. Нужно установить TableSpace по умолчанию в Users (у тебя он стоит в System), иначе в будущем придется все вновь создаваемые таблицы (если при создании явно не указывается TableSpace) выковыривать из System.
Из-под USER Sys As DBA выполняешь

ALTER USER Anet DEFAULT TABLESPACE Users

2. Из-под USER Anet выполняешь

Create Table myTable As select * from system.myTable

3. Из-под USER Sys As DBA выполняешь DROP исходной таблицы

Возможный подводный камень - скопируются ли LOB'ы? Под рукой нет похожей таблицы, поэтому не тестировал.
Если содержимое базы ценное - предварительно сделай полный dump smile
ava
Anet | 17.01.2005, 10:44 #


Т.е. , если код создания таблицы ранее был:
Цитата


CREATE TABLE myTable

(<some fields>)

STORAGE (...)

TABLESPACE SYSTEM...



то после

Цитата


ALTER USER Anet DEFAULT TABLESPACE Users

Create Table myTable As select * from system.myTable



будет

Цитата


CREATE TABLE myTable

(<some fields>)

STORAGE (...)

TABLESPACE USERS...


Правильно я поняла твой совет?
Конечно, слово "код" или "скрипт" не совсем подходят, но...
ava
igon | 17.01.2005, 18:23 #
Да,

ALTER USER Anet DEFAULT TABLESPACE Users
Create Table myTable As select * from system.myTable
скопирует таблицу myTable в TABLESPACE Users
ava
Anet | 19.01.2005, 10:55 #


Что-то я подзабыла, как можно создать пакет OWA_CONTENT? По моему, он должен находиться в схеме SYS. В документации по ORACLE9i он упоминается только при описании создания DAD. Но мне OWA_CONTENT нужен для других целей.
ava
Anet | 20.01.2005, 20:16 #


Большое спасибо, хороший link!
Вот, только,

(для загрузки страницы редактирования DAD) не работает.
Почему? Этот сбой произошел давно, я не обращалась к настройкам с тех пор, как настроила один DAD.
ava
Anet | 26.01.2005, 13:37 #


Есть некоторая таблица с полем varchar2. Как определить кодировку данных в этом поле?
И еще, подскажите, пожалуйста, есть ли функция,определяющая, в какой кодировке данные будут переданы на
ORACLE SERVER c Web страницы?
ava
igon | 27.01.2005, 01:13 #
Посмотри "Java: Русские буквы и не только..."
http://people.comita.spb.ru/users/sergeya/java/ruschars.html
ИМХО, исчерпывающий материал по вопросам кодировок. Для меня эта статья практически настольная smile
ava
Anet | 27.01.2005, 20:40 #


Спасибо, а что такое ИМХО?
Вопрос.
Есть пакет:

PACKAGE MY_UTL
 IS
type vc is table of varchar2(500)
   index by binary_integer;
type rf is ref cursor;

   function showlistitem (
       fieldname in varchar2,
       cvalue in MY_UTL.vc,
       clabel in MY_UTL.vc,
       cdefault in varchar2:=null,
       requirement in varchar2:='YES',
       cattributes in varchar2:=null
   )
       return varchar2;
...

Как передать в переменную cvalue данные? никак не могу найти у себя в документации :(

ava
igon | 28.01.2005, 02:41 #
1. ИМХО - от IMHO In my humble opinion
2.
Цитата
PL/SQL User's Guide and Reference
  5
  PL/SQL Collections and Records

Assigning Collection Elements

You can assign the value of an expression to a specific element in a collection using the syntax:



collection_name(subscript) := expression;



where expression yields a value of the type specified for elements in the collection type definition. If subscript is null or not convertible to an integer, PL/SQL raises the predefined exception VALUE_ERROR. If the subscript refers to an uninitialized element, PL/SQL raises SUBSCRIPT_BEYOND_COUNT. If the collection is atomically null, PL/SQL raises COLLECTION_IS_NULL. Some examples follow:



DECLARE
  TYPE NumList IS TABLE OF INTEGER;
  nums NumList;

BEGIN
  /* Assume execution continues despite the raised exceptions. */
  nums(1) := 10;  -- raises COLLECTION_IS_NULL
  nums := NumList(10,20,30); --Вот это ключевая строчка
  nums(1) := ASCII('A');
  nums(2) := 10 * nums(1);
  nums('B') := 15; -- raises VALUE_ERROR
  nums(4) := 40;  -- raises SUBSCRIPT_BEYOND_COUNT

END;


ava
Anet | 29.01.2005, 23:21 #


Спасибо за помощь!
Просмотрю полученную информацию.
ava
Anet | 10.02.2005, 21:54 #


Снова, здравствуйте!
Вопрос, наверно, смешной, но, возможно ли передать в виде фактического параметра таблицу, например, в курсор с параметрами? Если, нет, то как можно обойти проблему реализации многих процедур, структура которых однотипна, а разница лишь в том, что в курсоре используется таблица с другим именем?
ava
LSD | 10.02.2005, 22:44 #
В Dynamic SQL можно передать все что хочешь. Например:
   PROCEDURE print_table (tab_name VARCHAR2) IS
TYPE RefCurTyp IS REF CURSOR;
cv RefCurTyp;
p Person;
h Hobbies;
BEGIN
OPEN cv FOR 'SELECT pers, hobbs FROM ' || tab_name;
LOOP
FETCH cv INTO p, h;
EXIT WHEN cv%NOTFOUND;
-- print attributes of 'p' and elements of 'h'
END LOOP;
CLOSE cv;
END;

added later:
P.S. А почему вы пишите синим цветом? smile
ava
Anet | 12.02.2005, 20:39 #


Спасибо, я попробую. Сейчас очень много надо сделать, поэтому о результате сообщу попозже.


А что касается цвета моих сообщений, то это ......... потому, что синий мой любимый цвет, он читабелен и вписывается в цветовую гамму Vingrad-а. :cool

added later:

Хотя, фиолетовый...
Объясните пожалуйста, почему возникает ошибка:
PLS-0036: wrong number or types of arguments in call to 'SHOWLISTITEM'?
есть вызов

tt:=my_utl.showlistitem(fieldname =>'myselect',
cvalue => tvalue,
clabel => tlabel,
crequirement => 'yes');

где функция (заполнение tvalue и tlabel происходит через Bulk Collect Into)

PACKAGE MY_UTL
IS
type vc is table of varchar2(500)
index by binary_integer;

function showlistitem (
fieldname in varchar2,
cvalue in my_utl.vc,
clabel in my_utl.vc,
cdefault in varchar2:=null,
requirement in varchar2:='YES',
cattributes in varchar2:=null
)
return varchar2


ava
igon | 13.02.2005, 05:46 #
А у tvalue и tlabel перед вызовом функции тип какой? My_Utl.vc?
Покажи ту часть, где объявляются и заполняются tvalue и tlabel.
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  guest ava  LSD   igon   Anet
advanced
Submit