Table of ContentsPreviousNext

Ispirer             Ispirer


Ispirer SQLWays データベース移行ソフトウェア

Oracle %ROWTYPE を MySQLへ変換

Oracle の%ROWTYPE 属性はデータベースのテーブルのローを表すレコードタイプを提供します。もし %ROWTYPE を使用していれば、テーブルのカラムのデータ型やカラムの数が変更されてもアプリケーションコードはそのままで最新のカラムおよび型情報が使用されます。これによりアプリケーションからのデータの独立性が実現され、アプリケーションのコードの保守性を高めます。

MySQL には Oracle の%ROWTYPE と同等の機能はなく、全てのカラムに対して変数を宣言しなければなりません。

SQLWays は Oracle の %ROWTYPE 属性を使用した変数宣言を、MySQLではテーブルのカラムと同じ名前と型を持つ変数宣言のリストに変換します。

プロシージャ本体でレコードのフィールドを参照する変数が存在する場合、SQLWaysはそれを適切な変数に変換します。もしプロシージャ本体で %ROWTYPEを使った変数への代入ステートメントが存在する場合、SQLWaysは各変数への代入ステートメントのリストへ変換します。

変換例:

テーブル ora_rt は2つのカラムが存在します: NUMBER(10) のID および VARCHAR2(10) の Name

TABLE 22. レコードのフィールドへの参照のない%ROWTYPEの使用
Oracle
MySQL
CREATE PROCEDURE ORA_SP_ROWTYPE (ROW1 
OUT ora_rt%ROWTYPE) IS 
BEGIN 
   SELECT ID, Name 
      INTO ROW1 
      FROM ora_rt 
      WHERE ID = 1; 
END; 
CREATE PROCEDURE ORA_SP_ROWTYPE (OUT 
SWV_ROW1_ID INT, OUT SWV_ROW1_NAME VARCHAR(10))  
BEGIN 
	SELECT ID,Name 
INTO SWV_ROW1_ID,SWV_ROW1_NAME 
	FROM ora_rt 	WHERE ID = 1; 
END;/ 

注記: テーブル ora_rtには、 2つのカラムが存在します: NUMBER(10)ID および VARCHAR2(10)Name

TABLE 23. レコードのフィールドへの参照がある %ROWTYPE の使用
Oracle
MySQL
CREATE PROCEDURE ora_sp_rowtype3  IS 
ROW1 ora_rt%ROWTYPE; 
BEGIN 
   ROW1.ID := 5; 
   ROW1.Name := 'Tenth'; 
INSERT INTO ora_rt values (ROW1.ID, ROW1.Name); 
END; 
CREATE PROCEDURE ORA_SP_ROWTYPE3() 
BEGIN 
   declare SWV_ROW1_ID INT; 
   declare SWV_ROW1_NAME VARCHAR(10); 
   SET SWV_ROW1_ID = 5; 
   SET SWV_ROW1_Name = 'Tenth'; 
   INSERT INTO ora_rt 
values(SWV_ROW1_ID,SWV_ROW1_Name); 
END;/ 

TABLE 24.  レコードへの代入での %ROWTYPE の使用
Oracle
MySQL
CREATE PROCEDURE ora_sp_rowtype2  IS 
ROW1 ora_rt%ROWTYPE; 
ROW2 ora_rt %ROWTYPE; 
BEGIN 
   SELECT ID, Name 
      INTO ROW1 
      FROM ora_rt 
      WHERE ID = 1; 
ROW2 := ROW1; 
END; 
REATE PROCEDURE ORA_SP_ROWTYPE2() 
BEGIN 
   declare SWV_ROW1_ID INT; 
   declare SWV_ROW1_NAME VARCHAR(10); 
   declare SWV_ROW2_ID INT; 
   declare SWV_ROW2_NAME VARCHAR(10); 
   SELECT ID,Name 
   INTO SWV_ROW1_ID,SWV_ROW1_NAME 
   FROM ora_rt WHERE ID = 1; 
   SET SWV_ROW2_ID = SWV_ROW1_ID; 
 SET SWV_ROW2_NAME = SWV_ROW1_NAME; 
END;/ 


Table of ContentsPreviousNext
Ispirer             Ispirer
Copyright © 1999-2015 Ispirer Systems Ltd. Ispirer and SQLWays are trademarks of Ispirer Systems Ltd. All other product names may be trademarks of the respective companies. All rights reserved.