この記事では、SQL Server Migration Assistant (SSMA) for Oracle がシーケンスの関数を参照してプロシージャを変換しない理由について NEXTVAL
説明します。
背景
A SEQUENCE
は Oracle の独立したデータベース オブジェクトであり、通常は主キー/外部値に対して一意の整数を自動的に作成します。 A NEXTVAL
は、指定したシーケンスの次の値にアクセスするために使用されます。
SSMA では、オブジェクトを変換するときにSEQUENCE
、シーケンスからシーケンス、シーケンスから ID の 2 つの手法を使用できます。 SSMA がシーケンスに変換されると、各 Oracle シーケンスの対応する SEQUENCE
オブジェクトが SQL Server スキーマに作成されます。 シーケンスから ID へのモードでは、SSMA は SQL Server にオブジェクトを作成SEQUENCE
しないため、Oracle シーケンスをNEXTVAL
呼び出してもエラー メッセージが表示されます。
例
次の例を確認してください。
CREATE OR REPLACE PROCEDURE proc1
AS
t1 NUMBER;
BEGIN
SELECT customers_seq.NEXTVAL INTO t1 FROM DUAL;
END;
ここでは、シーケンス customers_seq
の次の値を取得しようとするストアド プロシージャがあります。 SSMA でシーケンスから ID へのモードが使用されている場合は、次のエラー メッセージが生成されます。
O2SS0221: ID シーケンス NEXTVAL の呼び出しはサポートされていません
考えられる対処方法
このエラーを解決するには、PL/SQL コードを書き直してアクセスを NEXTVAL
排除するか、SSMA プロジェクト設定を変更して、ID 列ではなく SQL Server でオブジェクトを生成 SEQUENCE
します。 後で実行するには:
- [ツール] メニューを選択し、[プロジェクト 設定] を選択します。
- 次に、[全般] タブを選択します。
- 次に、[シーケンス変換] グループで、[シーケンス ジェネレーターの変換] を [SQL Server シーケンス ジェネレーターの使用] に設定します。
- これらの設定を適用し、[OK] を選択 します。
関連する変換メッセージ
- O2SS0188: ソース メタデータにシーケンスが見つかりません (エラー)
- O2SS0214: 列にバインドされたシーケンスがありますが、ソース メタデータにシーケンスが見つかりませんでした
- O2SS0217: ID シーケンスへの呼び出し CURRVAL がサポートされていません (エラー)