Oracleエンジニアを目指す
ORACLE MASTER Gold ポイント解説
第2回 PL/SQLの基本を学ぶ
小野寺智子
2002/1/31
今回は、ORACLE MASTER Gold(以下、Gold)の取得に必要な「PL/SQL」と「DBA」の2科目のうち、PL/SQLの概要、変数の宣言、実行文の作成のポイントを解説します。なお、Goldに含まれるPL/SQLの範囲には、データベーストリガやストアードファンクションは含まれません。
■PL/SQLの概要
PL/SQLは、Procedural Language/SQLの略で、オラクルが提供するSQLの拡張型言語です。このPL/SQLでは、SQLのほか、変数(データ)、制御構造、例外処理(エラー処理)の機能を提供しています。
PL/SQLは、Oracle Server(SQL*Plus、Servermanagerなど)またはDeveloper(Oracle Forms、Oracle Reportなど)などの開発ツールに採用されています。しかし、この2つのPL/SQLでは異なる点があるので、その違いを比較しておきましょう(図1)。
図1 Oracle ServerにおけるPL/SQLの実行とDeveloperなどの開発ツールにおけるPL/SQLでの実行の違い |
PL/SQLは、SQLと違って一文ずつではなく、ブロック単位でサーバに送信できるので、ネットワークを通る通信量(トラフィック)を少なくすることができます(図2)。ネットワークへの通信量を少なくできるということは、パフォーマンスの向上にもつながりますし、そのほかにもさまざまなメリットがあります。
図2 PL/SQLの利点 |
それでは、そのブロックとはどのような構造をしているのでしょうか。
■PL/SQLの基本文法(変数の宣言)
PL/SQLは、「宣言部」「実行部」「例外処理部(エラー処理)」の3つのセクションから構成されています(図3)。この3つのセクションのうち、最低限必要なのが実行部です。つまり、宣言部と例外処理部は必須の項目ではなく、PL/SQLはこの2つがなくとも正常に実行されます。なお、変数と定数は宣言部で宣言する必要があります。PL/SQLの変数では、別のブロックであれば、異なる変数に同じ名前を使用することができます。この変数名の宣言は、命名規則に準じて宣言します。
図3 PL/SQLのブロック構造 |
スカラーの基本データ型
スカラーの基本データ型は、ORACLE MASTER Silver(以下、Silver)で学習したデータ型のほか、Goldで学習する次に挙げるPL/SQLの固有のデータ型を含みます。
|
それでは、スカラー型の変数宣言の例を挙げましょう。
|
%TYPE属性
%TYPE属性を使うと、以前に宣言された別の変数やデータベースに格納されている表の列に従って変数を宣言することができます。
|
%TYPEを使用して宣言された変数には、NOT NULL列制約は適用されません。%TYPE属性を宣言したときにも、変数にはNULLを割り当てることが可能です。
■PL/SQLの命名規則とデータ型の変換
PL/SQLにも、SQLのオブジェクトと同じように命名規則があります。これは、ORACLE MASTER Silverの学習範囲ですが、ここで簡単に復習しておきましょう。
まずは識別子です。
・最大30bytesを指定可能
・予約語は、基本的には使用できない(どうしても使用したい場合は「“ ”」ダブルクォーテーションでくくる)
・先頭の文字はアルファベットで開始する
・データベース内に格納されている表名や列名と同じ名前は使用しない(1つのSQL文の中にあるPL/SQL識別子の列名が同じであると、Oracleはその列は参照先と見るため)
PL/SQL内ではSQL関数のほとんどが使用可能です。しかし、プロシージャ文の中ではグループ関数やDECODE、DUMP、VSIZEは使用できません。
データ型の変換
1つの文に複数のデータ型が存在しているとデータ型の暗黙的変換が行われます。暗黙的変換は、異なるデータ型に代入するとそれに合うデータ型に自動的に変換されます。このように複数のデータが存在しているとエラーの原因や、パフォーマンスに影響を与えます。そのため、データ型を明示的変換にします。明示的変換は、変換関数を使用してデータ型を変換します。PL/SQLは、このような値の変換ができるのです。
|
それでは、暗黙的変換と明示的変換の比較を、図で理解しておきましょう(図4)。
図4 暗黙的変換と明示的変換の例 |
■ネストされたブロック
PL/SQLは、ブロックの実行部をさらに小さいブロックに分割できます。つまり、入れ子構造にできます。また、実行文を使用できるところであれば、どこでもブロックをネストできます。ネストされたブロックと変数の有効範囲は、上位レベルのブロックで宣言された変数であれば下位レベルのブロック内を参照できますが、下位レベルのブロックで宣言された変数は、上位レベルのブロックで参照することはできません。上位ブロックと同じ名前の変数は、下位ブロックで宣言された変数が優先されます(図5)。
図5 PL/SQLのネスト構造 |
最後に、今回取り上げた3つのカテゴリから、間違えやすいものを問題にしてみました。挑戦してみてください(問題の解答は、本連載の最後にあります)。
|
|
今回の問題の解答
|
I: 3 |
II: 2 |
III: 3 |
@IT自分戦略研究所は2014年2月、@ITのフォーラムになりました。
現在ご覧いただいている記事は、既掲載記事をアーカイブ化したものです。新着記事は、 新しくなったトップページよりご覧ください。
これからも、@IT自分戦略研究所をよろしくお願いいたします。