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(...) に置き換えようとしましたが、役に立ちませんでした。