0

Oracle PL/SQL パッケージを Oracle 11g (11.2.0.2.0) の Web サービスとして提供しようとしています。他のすべては順調に進んでいますが、Web サービスで XMLTYPE を使用するプロシージャ/関数を使用する際に問題があるようです。XMLTYPE が Oracle Web サービスでサポートされていない場合、またそのような制限を示すリソースが見つからない場合、私は非常に驚くでしょうが、何か間違ったことをしていると思います。ただし、どこに問題があるのか​​ 、したがって質問がわかりません。

Oracle 11g リリース 1 のネイティブ Oracle XML DB Web サービスに従って、Oracle データベースにネイティブ Web サービスを構成し、SoapUI を使用して基本的なデータ型で手順をテストすることに成功しました。

問題の他の原因を除外するために、問題を再現する次の最小化されたテスト パッケージを作成しました。

CREATE OR REPLACE PACKAGE web_test_package AUTHID CURRENT_USER AS
        PROCEDURE xmltype_test (dummy IN varchar2);
END;
/

CREATE OR REPLACE PACKAGE BODY web_test_package AS
        PROCEDURE xmltype_test (dummy IN varchar2)
        IS
                xt XmlType;
        BEGIN
                select XMLTYPE('<MyXmlTag></MyXmlTag>') into xt from dual;
        END xmltype_test;
END;
/

定義済みのプロシージャを SQLPlus で実行すると、うまく動作します。

SQL> exec web_test_package.xmltype_test;

PL/SQL procedure successfully completed.

サービスが構成され、パッケージがデータベースに定義されると、パッケージの WSDL をhttp://host:port/orawsv/DBSCHEMA/WEB_TEST_PACKAGE?wsdlから取得できます。WSDL を使用して、サンプル リクエストを含む SoapUI プロジェクトを作成します。次に、基本認証を使用するように要求を構成し、クエリをテストする準備が整いました。

SoapUI でクエリを実行すると、応答に次のエラーが表示されます。

               <OracleError>
                  <ErrorNumber>ORA-19202</ErrorNumber>
                  <Message>Error occurred in XML processing</Message>
               </OracleError>
               <OracleError>
                  <ErrorNumber>ORA-00904</ErrorNumber>
                  <Message>: invalid identifier</Message>
               </OracleError>
               <OracleError>
                  <ErrorNumber>ORA-06512</ErrorNumber>
                  <Message>at "MY_USER.WEB_TEST_PACKAGE", line 6</Message>
               </OracleError>
               <OracleError>
                  <ErrorNumber>ORA-06512</ErrorNumber>
                  <Message>at line 1</Message>
               </OracleError>

エラーを正しく解釈すると、select-clause がある行にエラー ORA-00904 "invalid identifier" が表示されます。そして、私の理解では、「XMLTYPE」はその行の唯一の識別子です。つまり、Web サービスを介してプロシージャが実行されたときに認識されません。

最後に質問です。Web サービスを介して呼び出されるプロシージャで XMLTYPE を使用できないという制限はありますか? それとも、ここで何か不足していますか?

念のため、コンストラクタ形式 XMLTYPE(...) をメソッド形式 XMLTYPE.CreateXML(...) に置き換えようとしましたが、役に立ちませんでした。

4

1 に答える 1