我有一个BLOB内容存储在一个表(x_files)中,MIME_TYPE ='text / plain',我想解析这个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;
由于
答案 0 :(得分: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