我正在使用本机Oracle XML DB Web服务(使用带有Web服务的PL / SQL函数)。 我想删除空值(在输出中没有任何内容(没有XML元素))。 它与Oracle 11.2.0.1.0一起使用,但不与Oracle 11.2.0.3.0一起使用。
只是为了澄清......我不想使用PL / SQL的Web服务,我想将我的PL / SQL包/过程/函数发布为Web服务!
希望有人可以帮助我。 谢谢。
在此示例中,“country”列为null。
Oracle 11.2.0.1.0(这就是我想要的):
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GET_PERSONOutput xmlns="http://xmlns.oracle.com/orawsv/TESTSTUFF/GET_PERSON">
<RETURN>
<PERSON>
<PERSON_ID>3</PERSON_ID>
<FIRST_NAME>Harry</FIRST_NAME>
<LAST_NAME>Potter</LAST_NAME>
</PERSON>
</RETURN>
</GET_PERSONOutput>
</soap:Body>
</soap:Envelope>
Oracle 11.2.0.3.0:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GET_PERSONOutput xmlns="http://xmlns.oracle.com/orawsv/TESTSTUFF/GET_PERSON">
<RETURN>
<PERSON>
<PERSON_ID>3</PERSON_ID>
<FIRST_NAME>Harry</FIRST_NAME>
<LAST_NAME>Potter</LAST_NAME>
<COUNTRY/>
</PERSON>
</RETURN>
</GET_PERSONOutput>
</soap:Body>
</soap:Envelope>
答案 0 :(得分:2)
使用XMLFOREST而不是XMLELEMENT将隐藏任何空数据的标记。
生成所需SOAP请求的示例查询看起来像这样:
SELECT XMLFOREST(XMLFOREST(p.id as "PERSON_ID",
p.first_name as "FIRST_NAME",
p.last_name as "LAST_NAME",
p.country as "COUNTRY"
) as "PERSON")
FROM PERSON_TABLE p WHERE p.id=3
我不确定原因,但XMLELEMENT在XML中留下了空标记。希望这适合你!
补充:关于XMLFOREST与XMLELEMENT的有用文章 - http://www.mandsconsulting.com/xmlforest-vs-xmlelement-missing-vs-empty-in-sqlx
答案 1 :(得分:1)
对所有遇到同样问题的人:
我为此问题创建了Oracle Service请求,Oracle支持人员说:
通过过程/函数访问不存在。这里的WSDL是 从函数定义驱动,无法指定空行为。
希望这些信息对您有所帮助。