0

イメージを Oracle データベース テーブルにロードする方法

画像のようなテーブルがあるとします

CREATE TABLE image (img_id number
                  ,img_name varchar2(100)
                  ,img   BLOB) ;

誰でも私を助けることができます

4

2 に答える 2

3
CREATE OR REPLACE DIRECTORY test_dir AS 'C:\'; 

DECLARE
  l_bfile  BFILE;
  l_blob   BLOB;
BEGIN
  INSERT INTO tab1 (col1, col2)
  VALUES (empty_blob(), 'test1')
  RETURN col1 INTO l_blob;

  l_bfile := BFILENAME('test_dir', 'Test.txt');
  DBMS_LOB.fileopen(l_bfile, Dbms_Lob.File_Readonly);
  DBMS_LOB.loadfromfile(l_blob, l_bfile, DBMS_LOB.getlength(l_bfile));
  DBMS_LOB.fileclose(l_bfile);

  COMMIT;
END;
于 2012-11-29T10:05:34.370 に答える
2

ファイルがDBサーバー上にある場合、アプローチについてはロバートの回答を参照してください。

ファイルが CLIENT ファイル システム上にある場合は、SQLLDR を使用します。例えば:

SQL> CREATE TABLE tab1 (
  2    id number primary key,
  3    image      BLOB
  4  );

Table created.

SQL> host sqlldr user/pass@yourdb control=load_image.ctl

SQL*Loader: Release 11.2.0.2.0 - Production on Thu Nov 29 10:41:08 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 1

SQL> select * from tab1;

        ID
----------
IMAGE
--------------------------------------------------------------------------------
         1
FFD8FFE000104A46494600010101004800480000FFE111C44578696600004D4D002A00000008000B
010F00020000000100000000011000020000000100000000011200030000000100010000011A0005


SQL> select length(image) from tab1;

LENGTH(IMAGE)
-------------
       263508

SQL>

制御ファイルは次のようになります。

LOAD DATA 
INFILE 'images.txt'
INTO TABLE tab1
FIELDS TERMINATED BY ','
(id  ,
 image_filename    FILLER CHAR(100),
 image             LOBFILE(image_filename) TERMINATED BY EOF)

およびサンプルの images.txt ファイル:

1,foo.jpg
于 2012-11-29T10:44:17.673 に答える