Вы смотрели на DBMS_XMLSAVE ?
Документация Oracle не дает примеров его использования, поэтому быстрый Google покажет вам.
Вот кое-что, основанное на вашем примере. (Который был вдохновлен информацией от здесь )
create table foo(
id number
,text varchar2(30)
)
CREATE OR REPLACE PROCEDURE p(p_xml IN CLOB,
p_table_name IN VARCHAR2)
IS
l_context DBMS_XMLSAVE.CTXTYPE;
l_rows NUMBER;
BEGIN
l_context := DBMS_XMLSAVE.NEWCONTEXT(p_table_name);
l_rows := DBMS_XMLSAVE.INSERTXML(l_context,
p_xml);
DBMS_XMLSAVE.CLOSECONTEXT(l_context);
END;
/
Вызовите процедуру p с примером xml
DECLARE
l_xml CLOB;
BEGIN
l_xml := '<ROWSET>
<ROW num="1">
<ID>123</ID>
<TEXT>Some Text</TEXT>
</ROW>
</ROWSET>';
p(p_xml => l_xml,
p_table_name => 'FOO');
END;
/
Запрос к таблице
select *
from foo