次の方法で共有


O2SS0101: パラメーターの省略が無効です (エラー)

この記事では、パラメーターを省略すると、SQL Server Migration Assistant (SSMA) for Oracle がパッケージ関数またはパッケージプロシージャ呼び出しの説明を取得できない理由について説明します。

背景

パッケージは、関連するプログラム オブジェクト (プロシージャ、関数、変数、定数、カーソル、例外など) がデータベースにまとめて格納されたカプセル化されたコレクションです。 パッケージで定義されている関数またはプロシージャを実行するには、関数名の前に (必須パラメーターを使用して) パッケージ名を付ける必要があります。

必要なパラメーターを省略してパッケージで定義されている関数またはプロシージャを呼び出すたびに、SSMA でエラーが発生しました。

次の例では、関数GET_SUMを含むパッケージMATH_PKGを作成します。

CREATE OR REPLACE PACKAGE MATH_PKG AS
    FUNCTION GET_SUM (n1 INT, n2 INT DEFAULT 0, n3 INT DEFAULT 0) RETURN INT;
END MATH_PKG;

CREATE OR REPLACE PACKAGE BODY MATH_PKG AS
    FUNCTION GET_SUM (n1 INT, n2 INT DEFAULT 0, n3 INT DEFAULT 0)
    RETURN INT
    IS
    BEGIN
        RETURN n1 + n2 + n3;
    END;
END MATH_PKG;

関数を呼び出す PL/SQL ステートメントの例を次に示します。

DECLARE
    addition INT;
BEGIN
    addition := MATH_PKG.GET_SUM();
END;

SSMA は、前のステートメントの変換を試みると、必要なパラメーターまたは間違った数の引数がないと呼び出された関数 GET_SUM を解決できないため、次のエラー メッセージが生成されます。

O2SS0101: パラメーターの省略が無効です

考えられる対処方法

Oracle でコードを書き直します。 実際、Oracle では、ステートメントで前のパッケージを呼び出すと、呼び出し GET_SUMで間違った数または引数の型の PL/SQL エラーも発生します。

関数内のパラメーターに省略可能な値を割り当てて、関数を呼び出すために必要な引数の数と型を一致させることで、Oracle 自体の問題を修正する必要があります。 パラメーターを省略可能にするには、既定値を設定します。 値が渡されない場合は、既定値が使用されます。

次の書き換えでは、既定値 (n1 INT DEFAULT 0) を関数の最初のパラメーターに GET_SUM 割り当てます。

CREATE OR REPLACE PACKAGE MATH_PKG AS
   FUNCTION GET_SUM (n1 INT DEFAULT 0, n2 INT DEFAULT 0, n3 INT DEFAULT 0) RETURN INT;
END MATH_PKG;

CREATE OR REPLACE PACKAGE BODY MATH_PKG AS
   FUNCTION GET_SUM (n1 INT DEFAULT 0, n2 INT DEFAULT 0, n3 INT DEFAULT 0)
   RETURN INT
   IS
   BEGIN
       RETURN n1 + n2 + n3;
   END;
END MATH_PKG;

SSMA でコードが正しく変換されるようになりました。