PL/SQLの型とWebサービス

PL/SQLパッケージに特定の要素がある場合、パッケージのプログラム・ユニットをWebサービスとしてデプロイするのに適していません。これらの要素について、次に説明します。

PL/SQLの型

NCHARおよびROWID

PL/SQLのNCHARおよびROWID型にはSOAPシリアライズがないため、シグネチャにこの型が含まれるプログラム・ユニット、またはNCHARまたはROWID型を属性として持つオブジェクト型がシグネチャに含まれるプログラム・ユニットは、Webサービスとしてデプロイできません。

BFILE

PL/SQLのBFILE型は、OUT引数またはファンクション戻り値としてのみ使用されます。

OUTおよびIN-OUT

OUTまたはIN-OUTパラメータのあるプログラム・ユニットを公開すると、OUTまたはIN-OUTパラメータのそれぞれに属性が1つある戻り型の構造でコール元に戻されます。 たとえば、シグネチャ

PROCEDURE a_proc(val1 IN VARCHAR2, val2 IN OUT NUMBER, val3 OUT INTEGER)のあるサービスでは次のようになります。

このサービスでは、生成された結果のクラスにval2 およびval3 という最終値を返します。生成されたクラスでは、アクセッサ・メソッドを使用してこれらの値にアクセスできます。

パッケージ仕様部で宣言される型

PL/SQLパッケージは、パッケージ仕様部で型を宣言できますが、このようなパッケージはWebサービスとして公開できません。

対処方法

パッケージのスコープ外で型を作成します。

オーバーロードされたプログラム・ユニット

同じパッケージ内の他のプログラム・ユニットと名前を共有するプログラム・ユニットが、オーバーロードされたプログラム・ユニットです。同じ名前のプログラム・ユニットが複数ある場合、実行するプログラム・ユニットを、WSDLプロセッサで実行時に判別できません。このため、それらのPL/SQLプログラム・ユニットはWebサービスとしてデプロイできません。

対処方法

オーバーロードされたプログラム・ユニットの問題を回避する例を次に示します。要件に応じて対応できます。

次のプログラムを含むPL/SQLパッケージについて考えてみます。

-- promotes an employee to the specified rank
PROCEDURE promote_emp(empno IN NUMBER, rank IN NUMBER);

-- promotes an employee to the rank above their current rank
PROCEDURE promote_emp(empno IN NUMBER);

次のいずれかの方法で、型のオーバーロードに対処できます。

2つのプロシージャを次に示します。

-- promotes an employee to the specified rank
PROCEDURE promote_emp_to_rank(empno IN NUMBER, rank IN NUMBER) IS
BEGIN
promote_emp(empno, rank);
END;

-- promotes an employee to the rank above their current rank
PROCEDURE promote_emp_to_next_rank(empno IN NUMBER) IS
BEGIN
promote_emp(empno);
END;


PL/SQL Webサービスの開発

 

Copyright © 1997, 2004, Oracle. All rights reserved.