エンタープライズ:特集 | 2003/07/25 18:19:00 更新 |
[Java Developer特別企画]2003年9月号
知っておきたいデータベース移行術「SQL Server→Oracle編」 (14/15)
JAVA Developer 2003年9月号より転載
●文法の移行とTransact-SQL文の移行
データ型、表定義、関数、演算子の移行が完了していれば、SQLの文法を確認し移行することで移行作業はほぼ完了します。
SQLの基本的な文法の違いは、本誌の別の連載でも一部触れられていますし、各データベースのマニュアルを参照のうえ、違いを修正する必要があります。プログラムからよく発行されるSQL文であるSELECT、UPDATE、DELETE文に関しては複雑な構文でなければ似ているものです。
SQL ServerにはTransact-SQLと呼ばれる独自のSQL拡張によるプロシージャを記述できます。これはOracle9iのPL/SQLに相当するものです。Transact-SQLとPL/SQLの構文は似ていますが、細かな違いはあります。変数の宣言方法、分岐方法、条件式、繰り返し文、例外処理、カーソルの取り扱いなど、機能とキーワードが同じであっても、順序や使い方が大きく異なるものがあります。Transact-SQLからPL/SQLへの移行は、こうした文法の違いを吸収することで可能です。
しかし、Transact-SQLで比較的大きなプログラムブロックが記述されている場合は、もう一度PL/SQLで記述しなおすぐらいの覚悟が必要かもしれません。場合によっては、移行の機会にJavaプログラムに書き換えてしまうのも解決策かもしれません。
表12 TransactSQLとPL/SQLとの違い | ||
SQL Server 2000 | Oracle9i | |
変数宣言 | DECLARE | ← |
ステートメントブロックの開始と終わり | BEGIN...END | BEGIN...END; |
条件処理 |
IF…[BEGIN…END] ELSE <条件> [BEGIN…END] ELSE IF <条件> |
IF…THEN, ELSIF…THEN, ELSE ENDIF; |
無条件の終了 | RETURN | ← |
無条件に終了,次のブロックへ移動 | BREAK | EXIT |
繰り返し文 |
WHILE … BEGIN … END LABEL; LABEL…GOTO LABEL |
WHILE LOOP…END LOOP; LABEL…GOTO FOR…END LOOP; LOOP…END LOOP; |
コメント文 | /* …*/, -- | ← |
プログラム実行 | EXECUTE | ← |
●索引、ビュー、トリガーなどの移行
SQL Serverの索引機能(Bツリーインデックスほか)は、すべてOracle9iでも利用できます。Oracle9iではさらに逆キーインデックスやビットマップインデックスを使用することができますので、インデックスの移行で大きな問題は生じないでしょう。ビューに関しては、SQL ServerとOracle9iともに索引をつけることができるビューを持っています。
トリガー機能関連では、SQL Serverが持っている機能は基本的にOracle9iも持っており、さらに行レベルのトリガーやユーザーのログオン/ログオフするタイミングでもトリガーが使用できるよう拡張されています。トリガーの中身は、Transact-SQL文ですので、その部分の命令に関してはPL/SQLと対応させながら注意深く作業しなければなりません。
関連リンク
JAVA Developer
定期購読のご案内
バックナンバー販売協力店
Javaコレクションのマスターを目指せ! JAVA Developer 9月号
大特集
特集2 BEA WebLogic ・コレクションフレームワークとデータ構造 ・知っておきたいデータベース移行術 「SQL Server→Oracle編」 ・Webアプリケーションセキュリティ |
前のページ | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 次のページ
[西脇 資哲,JAVA Developer]