Я изменил процедуру как
CREATE OR replace PROCEDURE P_TableAsWS_XMLIN_XMLOUT (
p_in IN XMLTYPE,
p_out OUT XMLTYPE
) AS
BEGIN
-- cursor_ OUT SYS_REFCURSOR) AS
-- with data as
--(select '<a><c>1</c><c>2</c></a>' xmlval
-- from dual)
SELECT
XMLELEMENT(
"employees",XMLAGG(XMLELEMENT(
"employee",XMLFOREST(e.id AS "empno",e.description AS "ename")
) )
)
INTO p_out
FROM
test_tab e,
XMLTABLE ( '/inp/*' PASSING p_in
COLUMNS
id varchar(50) PATH '/id'
) inp
WHERE
e.id = inp.id ;
end P_TableAsWS_XMLIN_XMLOUT;
Передача ввода -:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:p="http://xmlns.oracle.com/orawsv/TEST/P_TABLEASWS_XMLIN_XMLOUT">
<soapenv:Header/>
<soapenv:Body>
<p:P_TABLEASWS_XMLIN_XMLOUTInput>
<p:P_OUT-XMLTYPE-OUT/>
<p:P_IN-XMLTYPE-IN>
<inp>
<id>1</id>
<id>2</id>
</inp>
</p:P_IN-XMLTYPE-IN>
</p:P_TABLEASWS_XMLIN_XMLOUTInput>
</soapenv:Body>
</soapenv:Envelope>
Получение вывода -:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<P_TABLEASWS_XMLIN_XMLOUTOutput xmlns="http://xmlns.oracle.com/orawsv/TEST/P_TABLEASWS_XMLIN_XMLOUT">
<P_OUT>
<employees>
<employee>
<empno>1</empno>
<ename>ONE</ename>
</employee>
<employee>
<empno>2</empno>
<ename>TWO</ename>
</employee>
</employees>
</P_OUT>
</P_TABLEASWS_XMLIN_XMLOUTOutput>
</soap:Body>
</soap:Envelope>
Проблема заключается в -:
a) Я вручную добавил каждый столбец в процедуру.Если добавлен какой-либо новый столбец, процедуру необходимо изменить
b) Тип выходного столбца XMLTABLE должен быть жестко запрограммирован.Невозможно определить столбец как TABLE_NAME.COLUM_NAME% TYPE