DECLARE
TYPE rectype IS RECORD
(
src VARCHAR2 (10 CHAR),
trg VARCHAR2 (10 CHAR)
);
TYPE tabtype IS TABLE OF rectype
INDEX BY PLS_INTEGER;
v_tab tabtype;
v_request XMLTYPE;
BEGIN
v_tab (1).src := '10';
v_tab (1).trg := '11';
v_tab (2).src := '20';
v_tab (2).trg := '22';
-- and so on ...
SELECT XMLELEMENT (
"soapenv:Envelope",
xmlattributes ('http://schemas.xmlsoap.org/soap/envelope/' AS "xmlns:soapenv",
'http://www.abc.com' AS "xmlns:web",
'http://www.def.com' AS "xmlns:typ"),
XMLELEMENT ("soapenv:Header",
NULL),
XMLELEMENT ("soapenv:Body",
XMLELEMENT ("web:AAA",
XMLELEMENT ("web:BBB",
XMLELEMENT ("typ:Version",
'1.0'),
XMLELEMENT ("typ:DDD",
XMLELEMENT ("typ:EEE",
999),
XMLELEMENT ("typ:FFF",
888),
XMLELEMENT ("typ:DDDs",
NULL))))))
INTO v_request
FROM DUAL;
DBMS_OUTPUT.put_line (v_request.getstringval);
DBMS_OUTPUT.put_line ('-----------------------------------------------------------------------');
FOR i IN v_tab.FIRST .. v_tab.LAST -- quick & dirty
LOOP
SELECT APPENDCHILDXML (v_request,
'soapenv:Envelope/soapenv:Body/web:AAA/web:BBB/typ:DDD/typ:DDDs',
xmltype ( '<typ:DDD><typ:EEE>' -- this does not work because of the namespace
|| v_tab (i).src
|| '</typ:EEE><typ:FFF>'
|| v_tab (i).trg
|| '</typ:FFF></typ:DDD'))
INTO v_request
FROM DUAL;
END LOOP;
-- DBMS_OUTPUT.put_line (v_request.getstringval);
END;
ORA-31011: XML parsing failed ORA-19213: error occurred in XML processing at lines 1 LPX-00234: namespace prefix "typ" is not declared ORA-06512: at "SYS.XMLTYPE", line 310 ORA-06512: at line 1 ORA-06512: at line 48 ORA-06512: at "SYS.DBMS_SQL", line 1707More Details: https://docs.oracle.com/error-help/db/ora-31011