0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SQL Server Migration Assistant for Oracle による Oracle Database から Azure SQL Database への移行検証~Oracle sequences 編~

Last updated at Posted at 2023-04-09

概要

本記事の位置付けについて

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?