我想手动将ASCII流插入到oracle中BLOB类型的列中

我想手动将ASCII流插入到oracle中BLOB类型的列中,第1张

概述是否有将ASCII转换为blob的命令? 我有下表: sample_table:-------------id : NUMBER type : NUMBER version : NUMBER data : BLOB 执行以下命令时: insert into sample_table values (1, 0, 1, '<?xml version="1.0" encoding=" 是否有将ASCII转换为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 numbersql>

这是因为您在二进制字段中插入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          23C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223E3C546573743E3C6275666665723E3C413E3C2F6275666665723E3C2F546573743Esql>

这很容易,因为我使用的是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          14646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646464646sql>

顺便提一下,如果你要存储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 FailedORA-19202: Error occurred in XML processingLPX-00254: invalID XML declarationError at line 1ORA-06512: at "SYS.XMLTYPE",line 310ORA-06512: at line 1sql> 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类型的列中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1165089.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存