PL/SQLパッケージに特定の要素がある場合、パッケージのプログラム・ユニットをWebサービスとしてデプロイするのに適していません。これらの要素について、次に説明します。
PL/SQLのNCHARおよびROWID型にはSOAPシリアライズがないため、シグネチャにこの型が含まれるプログラム・ユニット、またはNCHARまたはROWID型を属性として持つオブジェクト型がシグネチャに含まれるプログラム・ユニットは、Webサービスとしてデプロイできません。
PL/SQLのBFILE型は、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;
Copyright © 1997, 2004, Oracle. All rights reserved.