この記事では、パラメーターを省略すると、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 でコードが正しく変換されるようになりました。
関連する変換メッセージ
- O2SS0102: プロシージャ (関数) 呼び出しにパラメーターがありません
- O2SS0104: パッケージ化されていない関数呼び出しにパラメーターがありません (エラー)