好了,發生了什麼是此:
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