您可以从BLOB转换为CLOB,然后将CLOB传递给XMLTYPE的构造函数。这里是一个功能...
-- PL/SQL function to convert a BLOB to an XMLTYPE
-- Usage: SELECT blob_to_xmltype(blob_column) FROM table_name;
CREATE OR REPLACE FUNCTION blob_to_xmltype (blob_in IN BLOB)
RETURN XMLTYPE
AS
v_clob CLOB;
v_varchar VARCHAR2(32767);
v_start PLS_INTEGER := 1;
v_buffer PLS_INTEGER := 32767;
BEGIN
DBMS_LOB.CREATETEMPORARY(v_clob, TRUE);
FOR i IN 1..CEIL(DBMS_LOB.GETLENGTH(blob_in)/v_buffer)
LOOP
v_varchar := UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(blob_in, v_buffer, v_start));
DBMS_LOB.WRITEAPPEND(v_clob, LENGTH(v_varchar), v_varchar);
v_start := v_start + v_buffer;
END LOOP;
RETURN XMLTYPE(v_clob);
END blob_to_xmltype;
/
和特定上面的例子,你可以使用EXTRACT()功能:
SELECT extract(blob_to_xmltype(myColumn), '/ROOT/a') FROM table_name;
以上将返回另一个XMLTYPE。如果您想获取节点的文本值,则可以使用EXTRACTVALUE()函数。