如何使用本机Oracle XML DB Web服务删除空值?

时间:2012-06-21 14:41:17

标签: xml web-services oracle oracle11g

我正在使用本机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>

2 个答案:

答案 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是   从函数定义驱动,无法指定空行为。

希望这些信息对您有所帮助。