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のBFILE型は、OUT引数またはファンクション戻り値としてのみ使用されます。
PL/SQL型のBCLOBはサポートされていません。
OUTまたはIN-OUTパラメータのあるプログラム・ユニットを公開すると、OUTまたはIN-OUTパラメータのそれぞれに属性が1つある戻り型の構造でコール元に戻されます。たとえば、シグネチャPROCEDURE a_proc(val1 IN VARCHAR2, val2 IN OUT NUMBER, val3 OUT INTEGER)
のあるサービスでは次のようになります。
このサービスでは、生成された結果のクラスにval2
およびval3
という最終値を返します。生成されたクラスでは、アクセッサ・メソッドを使用してこれらの値にアクセスできます。
JDeveloperでは、PL/SQLレコードを使用するPL/SQLパッケージからWebサービスを直接作成することはできません。旧バージョンのOracleデータベースから移行したPL/SQLパッケージを使用している場合、パッケージでやりとりされるパラメータがオブジェクト型ではなくレコード型であるために、機能をWebサービスとして公開しようとしても実行できない場合があります。
レコード型を含むパッケージではJPublisherを使用できます。生成されるSQLファイルをデータベースに対して実行すると、オブジェクト型を含む同じ内容のパッケージが作成されます。この新しいパッケージを使用すると、通常どおりにPL/SQL Webサービスを作成できます。
JPublisherのウィザードの詳細は、「JPublisherについて」を参照してください。
Oracle9i Databaseリリース2(9.2)では、同じ名前とパッケージ名を持つストアド・プロシージャまたはストアド・ファンクションに複数のスキーマからアクセスできる場合、PL/SQL Webサービスの公開中に起動されたSQLJトランスレータは異常終了します。
この問題を解決するには、公開するパッケージが1つのスキーマのみで認識されるようにし、他のスキーマのパッケージで同じ名前を使用しないようにしてください。
次の例のように、戻り型にrefカーソルを使用しているパッケージから、Webサービスを作成することはできません。
PACKAGE TEST AS
type EmpCurType is ref cursor;
function EmpData return TEST.EmpCurType;
END;
任意のユーザーがSYS権限を引き継ぐことを防ぐため、中間層からはSYS権限のある接続を特定できません。つまり、SYSスキーマ内のパッケージからはWebサービスを作成できません。
たとえば、JDeveloper内にWebサービスを作成するために、中間層からSYSスキーマ内のPL/SQLパッケージにアクセスする必要がある場合には、SYSとしてデータベースにログオンし、自分の使用するユーザーにパッケージのEXECUTE権限を付与し、JDeveloperデータベース接続を作成します。
PL/SQLパッケージは、パッケージ仕様部で型を宣言できますが、このようなパッケージはWebサービスとして公開できません。これを回避するには、パッケージのスコープ外で型を作成します。
JDeveloperでは、PL/SQLネスト表を使用するPL/SQLパッケージからWebサービスを直接作成することはできません。
Copyright © 1997, 2007, Oracle. All rights reserved.