大佬教程收集整理的这篇文章主要介绍了我想手动将ASCII流插入到oracle中BLOB类型的列中,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有下表:
sample_table: ------------- ID : numbER type : numbER version : numbER data : BLOB
执行以下命令时:
insert into sample_table values (1,1,'<?xml version="1.0" enCoding="UTF-8"><Test><buffer><A></buffer></Test>' );
我收到以下错误:ORA-01465:无效的十六进制数.
sql> insert into t42 2 (ID,version,type,data) 3 values (2,2,'<?xml version="1.0" enCoding="UTF-8"><Test><buffer><A></buffer></Test>') 4 / values (2,'<?xml version="1.0" enCoding="UTF-8"><Test><buffer><A></buffer></Test>') * ERROR at line 3: ORA-01465: invalID hex number sql>
这是因为您在二进制字段中插入ASCII文本.二进制字段需要十六进制字符,例如<. ?,=等不是十六进制.您需要做的是将其转换为十六进制,如下所示:
sql> insert into t42 2 values (2,utl_raw.cast_to_raw('<?xml version="1.0" enCoding="UTF-8"><Test><buffer><A></buffer></Test>')) 3 / 1 row created. sql> SELEct * FROM t42 2 / ID TYPE VERSION ---------- ---------- ---------- DATA -------------------------------------------------------------------------------- 2 0 2 3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223E3C5465 73743E3C6275666665723E3C413E3C2F6275666665723E3C2F546573743E sql>
这很容易,因为我使用的是Oracle 11g.如果您使用的是更早版本的Oracle – definitley 8,可能是9 – 那么您可能需要使用两步过程.首先插入一个这样的标记:
sql> insert into t42 2 values (1,empty_blob()) 3 / 1 row created. sql>
然后,您可以像这样填充BLOB列:
sql> declare 2 b blob; 3 begin 4 b := utl_raw.cast_to_raw(rpad('FF',32767,'FF')); 5 update t42 6 set data = b 7 where ID = 1; 8 end; 9 / pl/sql procedure successfully completed. sql> SELEct * FROM t42 2 / ID TYPE VERSION ---------- ---------- ---------- DATA -------------------------------------------------------------------------------- 1 0 1 46464646464646464646464646464646464646464646464646464646464646464646464646464646 46464646464646464646464646464646464646464646464646464646464646464646464646464646 sql>
顺便提一下,如果你要存储XML数据,为什么要将它存储为BLOB而不是作为字符数据(CLOB)或从9i开始存储本机XMLType类型?好吧,不使用XMLType的一个原因是你的文本不是格式良好的XML,但我认为这只是一个疏忽;)
sql> alter table t42 add xdata xmltype; table altered. sql> insert into t42 2 (ID,xdata) 3 values (4,xmltype('<?xml version="1.0" enCoding="UTF-8"><Test><buffer><A></buffer></Test>')) 4 / values (4,xmltype('<?xml version="1.0" enCoding="UTF-8"><Test><buffer><A></buffer></Test>')) * ERROR at line 3: ORA-31011: XML parsing Failed ORA-19202: Error occurred in XML processing LPX-00254: invalID XML declaration Error at line 1 ORA-06512: at "SYs.XMLTYPE",line 310 ORA-06512: at line 1 sql> insert into t42 2 (ID,xmltype('<?xml version="1.0" enCoding="UTF-8"?><Test><buffer>A</buffer></Test>')) 4 / 1 row created. sql> SELEct * FROM t42 2 / ID TYPE VERSION ---------- ---------- ---------- DATA -------------------------------------------------------------------------------- XDATA -------------------------------------------------------------------------------- 4 2 0 <?xml version="1.0" enCoding="UTF-8"?><Test><buffer>A</buffer></Test> sql>
以上是大佬教程为你收集整理的我想手动将ASCII流插入到oracle中BLOB类型的列中全部内容,希望文章能够帮你解决我想手动将ASCII流插入到oracle中BLOB类型的列中所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。