Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Как вставить изображение в БД ORACLE


Автор: darkvivi 11.10.2013, 16:42
 Здравствуйте! Мне понадобилось добавить в базу данных изображение. По идее, для этого нужен BLOB. 

Нашёл на просторах Интернета:
Код


CREATE TABLE image{
 name text, raster oid};
 INSERT INTO image (name, raster) VALUE('Beautiful image', lo_import('/etc/motd'));
 SELECT lo_export(image.raster, '/tmp/motd') FROM image WHERE name = 'Beautiful image';


 А куда, интересно, ссылается lo_import? Где скрываются таблицы, там же ведь надо искать?
 Как ещё можно реализовать BLOB?
 
 Ещё накопал: 
 Это объявление таблицы
Код

 CREATE TABLE pdm (
dname VARCHAR2(30), -- directory name
sname VARCHAR2(30), -- subdirectory name
fname VARCHAR2(30), -- file name
iblob BLOB); -- image file

Ещё вот что нашёл:
create table graphics_table (
Код

  bfile_id number,
  bfile_desc varchar2(30),
  bfile_loc bfile,
  bfile_type varchar2(4));

INSERT INTO graphics_table
   VALUES(4,'April Book of Days Woodcut',bfilename('GIF_FILES','APRIL.JPG'),'JPEG');
INSERT INTO graphics_table
  VALUES(30,'',bfilename('GIF_FILES','SHAPIROS.GIF'),'GIF'); 


'GIF_FILES' это папка? А можно ли путь от диска прописать? Думаю, так было бы удобнее...
 И хорошо, если удастся заинсертить картинку, но как и куда её потом можно вывести?
 Всем огромное спасибо, кто поможет)

Автор: Zloxa 11.10.2013, 17:37
Цитата(darkvivi @  11.10.2013,  17:42 Найти цитируемый пост)
А куда, интересно, ссылается lo_import? 

Почитайте в докментации PostgreSQL. smile 

Автор: darkvivi 11.10.2013, 17:42
 А как быть с папками? как сделать путь от диска?

Автор: Zloxa 11.10.2013, 17:45
darkvivi, еще раз повторяю для особо внимательныых. Ты прочел инструкцию не от оракла. Это функция постгра

Автор: darkvivi 11.10.2013, 17:54
 Хорошо) попробую разобраться)

Думаю, стоит опереться на bfilename, он практичнее.. поищу к нему документацию, всё, нашёл!

Код

CREATE TABLE lob_table (id NUMBER, doc BLOB);
INSERT INTO lob_table VALUES (1, EMPTY_BLOB()); 


CREATE DIRECTORY exampleDir AS 'c:\tmp';
DECLARE  src_lob  BFILE := BFILENAME('exampleDir', 'me.GIF');
  dest_lob BLOB;
BEGIN
  INSERT INTO lob_table VALUES(2, EMPTY_BLOB())
     RETURNING doc INTO dest_lob;

  DBMS_LOB.OPEN(src_lob, DBMS_LOB.LOB_READONLY);
  DBMS_LOB.LoadFromFile( DEST_LOB => dest_lob,
                         SRC_LOB  => src_lob,
                         AMOUNT   => DBMS_LOB.GETLENGTH(src_lob) );
  DBMS_LOB.CLOSE(src_lob);

  COMMIT;
END;
/

  
Выводит, что 
 "non-existent directory or file for %s operation"
*Cause:    Attempted to access a directory that does not exist, or attempted
           to access a file in a directory that does not exist.
*Action:   Ensure that a system object corresponding to the specified
           directory exists in the database dictionary, or
           make sure the name is correct.
Хотя файл лежит на месте..

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)