从blob字段PL / SQL中读取多个值

时间:2013-07-02 14:03:58

标签: sql oracle plsql blob

我使用以下代码将几个文件写入一个 BLOB字段:

    create or replace procedure blob_loader as

      dir    varchar2(50) := 'FILES_TO_LOAD';
      lblob  BLOB;
      lfile  BFILE;
      f      UTL_FILE.FILE_TYPE := UTL_FILE.FOPEN(dir, 'index.txt', 'R');
      buffer VARCHAR2(30000);

    begin

      insert into blob_table
        (blob_file)

  values
    (empty_blob())
  returning blob_file into lblob;

  dbms_lob.open(lblob, dbms_lob.lob_readwrite);

  LOOP
    BEGIN
      utl_file.get_line(f, buffer);

      lfile := BFILENAME(dir, buffer);
      dbms_lob.open(lfile, dbms_lob.lob_readonly);

      dbms_lob.loadfromfile(lblob, lfile, dbms_lob.getlength(lfile));
      dbms_lob.close(lfile);

    EXCEPTION
      WHEN no_data_found THEN
        EXIT;
    END;
  END LOOP;

  dbms_lob.close(lblob);
  commit;

end blob_loader;

现在我想将该字段中的文件读回磁盘,以便它们再次成为单独的文件。

有没有人知道如何定义blob字段中的一个文件何时结束而另一个文件何时开始?

很少帮忙?

1 个答案:

答案 0 :(得分:0)

暂且不谈明确将每个文件存储为单独的BLOB ...

在我看来,你有两个选择。将文件的长度存储在某处,并使用它来控制从BLOB读取的数据量;或者将一些分隔符值放入文件之间的BLOB中。分隔符对我来说似乎是更糟糕的选择 - 您必须选择一个保证不存在于文件数据中的值,并且您必须读取单个字节才能找到分隔符。

所以存储长度。可能是文件名。这意味着每个文件有一行的子表。这让我们回到了这个问题 - 为什么不在每个行中存储一个BLOB,每个文件一个?