1

MIME_TYPE = 'text/plain' のテーブル (x_files) に保存されている BLOB コンテンツがあり、この BLOB データを解析し、VARCHAR2 列を持つテーブル (TEMP_UPLOAD_DATA) にデータを挿入したいと考えています。

サンプルコードを教えてください。以下に示すようにコードを書きました-DBMS_OUTPUTを実行すると正常に機能しますが、データをテーブルに挿入しようとすると正常に機能しません

最初に BLOB を CLOB に変換してから、データを解析してテーブルに挿入する必要がありますか? 入力をリクエストする

データベース内のテーブル:

Table_name: X_files
ID  BLOB_CONTENT    MIME_TYPE   FILE_NAME   LAST_UPDATED    CHARECTER_SET
7   BLOB    text/plain  testing_blob.txt    01/28/2013  - 

Table name: TEMP_UPLOAD_DATA 
Column Name Data Type   Nullable    Default Primary Key
UPLOAD_COLUMN   VARCHAR2(1000)  Yes - 

- 

私が書いたコード:-これは、 DBMS_OUTPUT を実行すると正常に機能しますが、データをテーブルに挿入しようとすると正常に機能しません。

DECLARE
l_num NUMBER(8);
i NUMBER(4);
lob_loc  BLOB;
update_details VARCHAR2(10000);
BEGIN
SELECT BLOB_CONTENT INTO lob_loc FROM x_files WHERE  id = 7; 
update_details := UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(lob_loc, 10000, 1));
l_num := (LENGTH(update_details)-LENGTH(REPLACE(update_details,'@@')))/LENGTH('@@');
for i in 1..l_num 
LOOP
DBMS_OUTPUT.PUT_LINE('STRING IS---' || SUBSTR(update_details,instr(update_details,'@@',1,i),(instr(update_details,'##',1,i)-instr(update_details,'@@',1,i)+1)));
--INSERT INTO TEMP_UPLOAD_DATA VALUES(SUBSTR(update_details,instr(update_details,'@@',1,i),(instr(update_details,'##',1,i)-instr(update_details,'@@',1,i)+1)));
END LOOP;
END;

ありがとう

4

1 に答える 1

0

この例は、BLOB データの部分文字列を varchar2 列に挿入することがいかに簡単かを示しています。元の質問には、コードが質問が要求するよりも多くのコマンドをブレンドしている無数の不完全なセットアップ スクリプトがあります。

create table blob_table ( id number primary key, blob_content blob );
create table char_table ( id number, char_content varchar2(10) );

insert into blob_table 
     values (1, utl_raw.cast_to_raw('ABCDEFGHIJKLMNOPQRSTUVWXYZ'));

insert into char_table (id, char_content) 
     select bt.id, utl_raw.cast_to_varchar2(dbms_lob.substr(bt.blob_content, 10, 1)) 
       from blob_table bt 
      where bt.id = 1;

select * from char_table;

        ID CHAR_CONTENT
---------- ------------
         1 ABCDEFGHIJ
于 2013-05-03T16:55:22.393 に答える