トップページへ PASSJ ブログへ
トップページへ
分科会
特集!
コミュニケーション
資格
セミナー・コンファレンス
インフォメーション
Oracleキーワードから学ぶ、逆引き! SQL Server入門
文=株式会社CSK 教育サービス事業部
第6回
プログラミング編
スペシャルキーワード:カーソル
このコーナーでは、毎回Oracleの重要なキーワードをピックアップして、それぞれに対応するSQL Serverの用語や機能を解説していきます。Oracleを基準とした逆引き形式なので、これまでにマスターしたOracleの知識を最大限に生かしながら、スムーズにSQL Serverを習得できます!
特に重要な“スペシャルキーワード”は、さらに詳しく別ページを設けて解説しています。
◎プログラミング編◎
Oracleでは、リレーショナルデータベース操作の標準言語であるSQLとともに、プログラミング言語としてSQLを拡張したOracle独自の「PL/SQL」を使用します。それでは、SQL Serverでプログラミングをする場合には、どのような言語を使用するのでしょうか……?
今回は、「カーソル」、「例外処理」などプログラミングに関係するキーワードを紹介していきます。

カーソル


Oracle Serverにおけるカーソルには、1行だけの結果を扱う「暗黙カーソル」と複数行の結果を扱うことができる「明示カーソル」の2種類があります。暗黙カーソルは、カーソル名の宣言を行うことなく使用できるもので、明示カーソルは、宣言部でカーソル名とSELECT文を対応づける必要があります。
一方、SQL Serverにおけるカーソルは、Oracle Serverの明示カーソルに該当するものだけがあります。Oracle ServerとSQL Serverのカーソルの機能の違いで目立ったものは、SQL Serverのカーソルはオープン時にカーソル引数が使えないこと、そしてフェッチの方向が自由に設定できることです。SQL Serverの場合は、順方向フェッチ、逆方向フェッチなど、さまざまなフェッチの方法があります。

☆さらに詳細はこちら→


PL/SQL


Oracle では、リレーショナルデータベースを操作するための対話式の言語であるSQLと、SQLを拡張したプログラミング言語「PL/SQL」を区別しています。
SQL Serverでは特に区別はなく、SQL Serverで実行するSQLステートメントをすべて「Transact-SQL」と呼びます。
PL/SQLは「PL/SQLブロック」単位で関連する処理をグループ化し、1度に送信して実行します。一方、Transact-SQLではSQL Serverに1度に送信する単位は「バッチ」と呼び、キーワード「GO」で終了します。そのバッチの中に、BEGIN…ENDで囲み複数のステートメントをまとめた「ステートメントブロック」を含めることができます。また、宣言部や例外処理部のようにブロックで記述するという考え方はありませんが、変数宣言やエラー処理はプログラムで書くことができます。

関数


Oracle Serverで使用できる関数には、システムで提供されている単一行関数やグループ関数と、PL/SQLで作成できるユーザー定義関数(ファンクション)があります。以下、左側「Oracle Server」:右側「SQL Server」の対応で、カッコ内はそれぞれの説明です。
・「単一行関数」:「スカラー関数」
   (1行に対して1つの結果を返します)
・「グループ関数」:「集合関数」
   (行のグループに対して1つの結果を返します)
・「ユーザー定義関数」:「ユーザー定義関数」
   (ユーザーが独自に作成できる関数です)
・「なし」:「行セット関数」
   (SQLステートメントのFROM句でテーブル参照の代わりに使用できます)
Oracle ServerとSQL Serverで、同じ名前の関数や似たような関数も多くあります。しかし、たとえばSQL ServerではROUNDの第2引数は必須など、同じ名前でも使い方が違う場合もあるので注意が必要です。

データ型


Oracleで使用しているデータ型は、SQL Serverと比べてかなりシンプルな構成になっています。たとえば、数値を表す型は「NUMBER型」だけであり、NUMBER型の指定の仕方で整数、少数点以下を扱うもの、浮動小数点扱いになるもの、といった具合に変化します。それに対して、SQL Serverでは1から255までの整数は「tinyint型」、-32768から32767までの整数は「smallint」といったように、扱う数値に応じて型そのものが違ってきます。
どちらの製品も数値、文字、日付、バイナリなど扱うデータの種類自体は大きな差はありませんが、型名などにかなり違いがあります。Oracle ServerからSQL Serverへ移行する場合は、そのまま移行できるものもあれば、何らかの変更が必要なものもあります。SQL Server「のDTSエクスポート/インポートツール」を使うと、CREATE TABLE文を自動生成するので、どのような型に変換されたか確認することができます。

例外処理


PL/SQLでは、エラーがあった場合に備えて「EXCEPTIONブロック」を作成します。BEGIN〜ENDで例外が発生すると、自動的にEXCEPTIONブロックに制御が移る仕組みになっています。
Transact-SQLには、エラー時に自動的にエラー処理部に制御が移る仕組みはありません。エラー時にはそのまま処理が進む場合と、強制終了になる場合があります。強制終了はファイルが一杯などの主にリソースが使用できない場合に発生しますので、管理を徹底することで防ぐことが可能です。通常のエラー処理では、エラーの発生しそうなステートメントの後にIF文を入れ、@@ERROR関数を使用して「直前のステートメントにエラーが発生したか」を判断します。
IF文の中には、ROLLBACKなど必要なエラー対応処理を記述します。

コメント


PL/SQLでコメントを記述する場合、行内コメント(インラインコメント)は「--(ハイフン2つ)」で表し、複数行にまたがるブロックコメントは「/*」と「*/」で囲みます。これらはTransact-SQLでも同様です。コメントにする場合の注意として、Transact-SQLではブロックコメントの中に「GO」コマンドを入れないようにします。GOコマンドはクエリアナライザやOSQLなどのツール用のコマンドで、バッチ(まとめてSQL Serverに送られ、コンパイル、実行される単位)を区切るためのものです。このGOコマンドがブロックコメントの中にある場合、GOだけが正常に動作してしまい、/*と*/が別々にSQL Serverに送られます。その結果「/*」記号がコメントと判断されずにエラーになってしまうのです。これを避けるためには、ブロックコメントの中のGOをインラインコメントします。




・ 第1回 基本用語編:データベースオブジェクト
・ 第2回 ユーティリティ編:SQL*Plus
・ 第3回 アーキテクチャ編(1):インスタンスとデータベース
・ 第4回 アーキテクチャ編(2):セグメント/エクステント/データブロック
・ 第5回 アーキテクチャ編(3):索引
・ 第6回 プログラミング編:カーソル
・ 第7回 トランザクション/ロック編:読み取り一貫性
・ 第8回 バックアップとリカバリ編:スタンバイ・データベース
・ 第9回 ユーザー管理編:ロール
・ 第10回 パフォーマンスチューニング編:EXPLAIN PLAN(実行プランの表示)



← 特集!DBバイリンガル 目次

PASSJメールニュース 著作権ついて プライバシーポリシー リンクポリシー お問い合わせ
(C) 2005 Professional Association for SQL Server Japan. All rights reserved.