忍者ブログ
データベースエンジニアのための実践ブログ。Oracle・PostgreSQL・MySQLなどの環境構築、実行計画の読み方やチューニングといった現場で役立つノウハウ、DB基礎知識までを発信しています。

【PL/SQL入門 第2回】変数を宣言して、値を出力してみよう!DECLAREブロックの書き方と代入演算子(:=)の基本

前回の「Hello World」では、PL/SQLの基本的なブロック構造(BEGIN 〜 END)と画面出力の方法を確認した。

第2回目となる今回は、プログラムの基本であり核心のひとつでもある「変数」の扱い方を解説する。

変数が使えるようになると、動的な値の保持や計算結果の使い回しができるようになり、PL/SQLの表現力が劇的に広がる。Database ActionsのSQLワークシートを開いて、実際に手を動かしながら学んでいこう!


【前提条件】

  • 前回の記事でAutonomous AI Database Serverless環境が構築済みであること。
  • Database Actionsの「SQL」ワークシートが使える状態であること。

1. 変数とは何か(DECLAREブロックの役割)

変数とは、一言でいえば値を一時的に入れておく「箱」のようなものである。PL/SQLでは、処理の途中で計算した値や、データベースから取得したデータを変数に格納し、後続の処理で使い回すことができる。

PL/SQLで変数を使うには、処理を実行するBEGINの前にDECLAREブロックを置く必要がある。前回の「Hello World」はいきなりBEGINから始まっていたが、変数を使う場合は次のような構造になる。

DECLARE
    -- ここで変数を宣言する
BEGIN
    -- ここで実際の処理を書く
END;
/

DECLAREは「宣言する」という英単語のとおり、「これからこのプログラム内で使う変数はこれです」とあらかじめコンパイラに名乗っておくための宣言部である。


2. 変数を宣言して、初期化するサンプル

さっそく、変数を宣言しながら初期値(代入)を行うサンプルコードを実行してみよう。

DECLARE
    -- 変数の宣言と初期化
    v_message  VARCHAR2(20) := 'Hello World';
BEGIN
    -- 変数の出力
    DBMS_OUTPUT.PUT_LINE(v_message);
END;
/

実行結果(想定):

Hello World

PL/SQLプロシージャが正常に完了しました。

経過時間: 00:00:00.006

構文のポイント解説

構文要素意味・解説
v_message 変数名。自分がわかりやすい任意の名前を付けられる。
VARCHAR2(20) データ型。「最大20文字までの可変長文字列」を格納するという定義。
:= 代入演算子。「右辺の値を左辺の変数に入れる」という意味。
'Hello World' 代入する値(文字列リテラルはシングルクォートで囲む)。

Oracle PL/SQLでは、通常の比較で使う = ではなく、:= を使って値を代入するのが特徴である。これはSQL文のWHERE句などにおける条件比較(例:WHERE id = 1)の = と区別するためであり、初心者が最初につまずきやすいポイントなのでしっかり覚えておこう。

命名のちょっとしたルール(プレフィックス)
変数名の先頭に v_ を付けているのは、Oracle PL/SQL開発現場でよく使われる命名慣習(variable の頭文字)である。必須ではないが、「これは変数だ」とひと目でわかるようにしておくことで、コードが長大・複雑になったときの可読性が大きく向上する。

3. 「宣言」と「代入」を分けて書くパターン

先ほどの例は、宣言と同時に値を入れる「初期化」の形だった。これを「宣言」と「代入」を別々の行に分けて書くことももちろん可能である。

DECLARE
    v_message  VARCHAR2(20);  -- 宣言のみ(この時点では中身は空=NULL)
BEGIN
    v_message := 'Hello World';  -- 後から値を代入
    DBMS_OUTPUT.PUT_LINE(v_message);
END;
/

実行結果は先ほどと同じ「Hello World」になるが、プログラムの内部的な処理の流れとしては、

  1. v_message という名前の「空の箱」をメモリ上に用意する(宣言)
  2. その箱に 'Hello World' という文字列を流し込む(代入)
  3. 箱の中身を DBMS_OUTPUT.PUT_LINE で画面に出力する

という3つのステップに分かれている。普段何気なく使う「初期化」という言葉は、実は「宣言」と「代入」を同時に行う省略形なのだということが、この書き方をするとよく理解できる。


4. まとめ

習得項目ポイント・構文
DECLAREブロック 変数を使うときに BEGIN の手前に配置する宣言部
変数の宣言 変数名 データ型;
変数の初期化 変数名 データ型 := 値;
代入演算子 := (比較用の = とは異なるので注意)
変数の出力 DBMS_OUTPUT.PUT_LINE(変数名);

今回はPL/SQLにおける変数の基本と、DECLAREブロックの書き方をマスターした。

次回の予告
変数が使えるようになったら、次は条件によって処理を分岐させる制御構文を学ぼう。
次回は「IF文」による条件分岐の基本と書き方を詳しく解説する予定だ。お楽しみに!
PR