1

ネイティブのOracleXMLDB Webサービスを使用しています(WebサービスでPL / SQL関数を使用)。null値を削除したい(出力に何も入れない(XML要素なし))。Oracle 11.2.0.1.0では動作しますが、Oracle11.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>
4

2 に答える 2

2

XMLELEMENTの代わりにXMLFORESTを使用すると、空のデータのタグが非表示になります。

必要な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

同じ問題を抱えているすべての人に:

この問題に対するOracleサービス要求を作成しましたが、Oracleサポートは次のように述べています。

これは、プロシージャ/関数を介したアクセスには存在しません。ここで、WSDLは、nullの動作を指定する方法がない関数定義から駆動されます。

この情報がお役に立てば幸いです。

于 2012-08-01T09:27:37.790 に答える