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