好了,发生了什么是此:
SQL> insert into t42
2 (id, version, type, data)
3 values (2, 0, 2, '<?xml version="1.0" encoding="UTF-8"><Test><buffer><A></buffer></Test>')
4/
values (2, 0, 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, 0, 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, 0, 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, version, type, xdata)
3 values (4, 0, 2, xmltype('<?xml version="1.0" encoding="UTF-8"><Test><buffer><A></buffer></Test>'))
4/
values (4, 0, 2, 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, version, type, xdata)
3 values (4, 0, 2, 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十六进制什么数字转换为数字字段?示例代码和表定义可能有帮助... – DCookie 2010-05-28 18:02:32
该列是BLOB类型。我想将序列化的XML添加到此列中...类似于插入表名值('xml text'); – 2010-05-28 18:40:51
该号码的OERR解释仅讨论ROWID。在你的情况下,这似乎是相关的。如果没有,我认为你真的需要给我们一些细节。当然你不需要;你可以选择多少重视你接收答案。 – APC 2010-05-28 20:17:21