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 における変数と定数編~

Last updated at Posted at 2023-04-09

概要

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

Oracle Database から Azure SQL Database へ SQL Server Migration Assistant for Oracle (SSMA)によるプログラム移行検証結果の一部である。次の記事にて個別機能別記事へのリンクを整理している。

変数と定数について

Oracle Database では、変数と定数を定義できる。定数について、Oracle Database ドキュメントにて、次のように記載されている。

変更されない値を保持します。

引用元:13.14 定数の宣言 (oracle.com)

%TYPE 属性や%ROWTYPE 属性を指定することで、定義済みのデータ型などを再利用することができる。

%ROWTYPE属性を使用すると、データベースの表またはビュー内の行の全体または一部を表すレコードを宣言できます。

引用元:1.2.8.3 %ROWTYPE属性の使用 (oracle.com)

%TYPE属性を使用すると、事前に宣言されている変数または列と同じデータ型のデータ項目を(データ型を知らなくても)宣言できます。

引用元:1.2.8.4 %TYPE属性の使用 (oracle.com)

参考リンク

特になし。

Azure SQL Database への移行

SSMA による変換

Azure SQL ファミリーでは、定数をサポートしていないため、変数に変換される。%TYPE 属性と%ROWTYPE 属性に相当する機能がないため、参照元のデータ型などを静的なコードに変換される。

移行方針

特になし。

変換例

変換例 1 変数

Oracle Database のコード
DECLARE 
    var NUMBER(10,0) :=10;
BEGIN
    var := 100;
    DBMS_OUTPUT.PUT_LINE(var);
END;
Azure SQL Database への変換

SSMA により次のように変換される。

BEGIN

   DECLARE
      @VAR numeric(10, 0) = 10

   SET @VAR = 100

   PRINT @VAR

END
GO

変換例 2 定数

Oracle Database のコード
DECLARE
    CONST_NUM CONSTANT NUMBER(10,0) := 12;
BEGIN
    DBMS_OUTPUT.PUT_LINE(CONST_NUM);
END;
Azure SQL Database への変換

SSMA により次のように変換される。

BEGIN

   DECLARE
      @CONST_NUM numeric(10, 0) = 12

   PRINT @CONST_NUM

END
GO

変換例 3 %TYPE 属性

Oracle Database のコード
DECLARE
    var HR.departments.manager_id%TYPE;
BEGIN
    select manager_id INTO var from HR.departments WHERE department_id = 90;
    DBMS_OUTPUT.PUT_LINE(var);
END;
Azure SQL Database への変換

SSMA により次のように変換される。

BEGIN

   DECLARE
      @VAR numeric(6, 0)

   SELECT @VAR = DEPARTMENTS.MANAGER_ID
   FROM HR.DEPARTMENTS
   WHERE DEPARTMENTS.DEPARTMENT_ID = 90

   PRINT @VAR

END
GO

変換例 4 %ROWTYPE 属性

Oracle Database のコード
DECLARE 
    d_row HR.departments%ROWTYPE;
BEGIN
    SELECT * INTO d_row FROM HR.departments WHERE department_id = 90;
    DBMS_OUTPUT.PUT_LINE(d_row.MANAGER_ID);
END;
Azure SQL Database への変換

SSMA のプロジェクト設定値であるConvert record as a list of separates variablesYESの場合に、SSMA により次のように変換される。

BEGIN

   DECLARE
      @D_ROW$DEPARTMENT_ID numeric(4, 0), 
      @D_ROW$DEPARTMENT_NAME varchar(30), 
      @D_ROW$MANAGER_ID numeric(6, 0), 
      @D_ROW$LOCATION_ID numeric(4, 0)

   SELECT @D_ROW$DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID, @D_ROW$DEPARTMENT_NAME = DEPARTMENTS.DEPARTMENT_NAME, @D_ROW$MANAGER_ID = DEPARTMENTS.MANAGER_ID, @D_ROW$LOCATION_ID = DEPARTMENTS.LOCATION_ID
   FROM HR.DEPARTMENTS
   WHERE DEPARTMENTS.DEPARTMENT_ID = 90

   PRINT @D_ROW$MANAGER_ID

END
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?