1

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

希望可以有人帮帮我。谢谢你。

在此示例中,列“国家”为空。

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>

甲骨文 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>
4

2 回答 2

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

于 2012-07-18T18:50:21.813 回答
1

To all people with the same problem:

I created a Oracle Service request for this problem and the Oracle support says:

This does not exist for access via procedures/functions. Here the WSDL is driven from function definition which has no way to specify null behavior.

Hope this information is helpful for you.

于 2012-08-01T09:27:37.790 回答