概要
本記事の位置付けについて
Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle (SSMA)によるプログラム移行検証結果の一部である。次の記事にて個別機能別記事へのリンクを整理している。
sequences について
Oracle Database ドキュメントにて、次のように記載されている。
複数のユーザーが一意の整数を生成するときに使用できるデータベース・オブジェクトです。 順序を使用すると、主キー値を自動的に生成できます。
引用元:CREATE SEQUENCE (oracle.com)
参考リンク
- ホワイトペーパー
- Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database
- Oracle to SQL Server Migration Handbook v2.0
Azure SQL Database への移行
SSMA による変換
Oracle Database の Cursor を置換するロジックについては、次のホワイトペーパーに記載されている。
- Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database
- Oracle to SQL Server Migration Handbook v2.0
移行方針
Oracle Database の sequences 機能は、 Azure SQL Database の sequences 機能に、一部機能を除き変換される。
Oracle Database の CURRVAL 機能を Azure SQL Database ではサポートしていないため、Guide to Migrating from Oracle to SQL Server 2014 and Azure SQL Database
記載の方法を参考に Azure SQL Database の sequences 機能を用いない方法に移行する必要がある。
変換例
変換例 1 sequences の基本的な定義
Oracle Database のコード
sequences の基本的な定義を行うコードの変換仕様を説明する。
CREATE SEQUENCE hr.seq_test
INCREMENT BY 1
START WITH 1
MAXVALUE 99999999999
MINVALUE 1
CYCLE NOCACHE
;
Azure SQL Database への変換
次の T-SQL のコードに変換される。
IF EXISTS (SELECT * FROM sys.sequences seq JOIN sys.schemas sch ON seq.schema_id=sch.schema_id WHERE seq.name=N'SEQ_TEST' AND sch.name=N'SSMA' )
DROP SEQUENCE [HR].[SEQ_TEST]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE SEQUENCE [HR].[SEQ_TEST]
AS numeric(28)
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 99999999999
CYCLE
NO CACHE
変換例 2 NEXTVAL の利用
Oracle Database のコード
WITH SRC AS(
SELECT 'A' AS NAME FROM DUAL
UNION ALL
SELECT 'B' AS NAME FROM DUAL
UNION ALL
SELECT 'C' AS NAME FROM DUAL
)
SELECT
hr.seq_test.nextval
,NAME
FROM
SRC;
Azure SQL Database への変換
次の T-SQL のコードに変換される。
WITH
SRC AS
(
SELECT 'A' AS NAME
UNION ALL
SELECT 'B' AS NAME
UNION ALL
SELECT 'C' AS NAME
)
SELECT NEXT VALUE FOR HR.SEQ_TEST, SRC.NAME
FROM SRC
GO