【入門編】 PL/pgSQLの変数とデータ型 – PostgreSQL

こんにちは!データベースの世界へようこそ。

PostgreSQLを触っていると、「もっと複雑な処理を自動化したいな」と思う瞬間が必ずやってきますよね。そんなとき、SQLの命令文だけでは力不足を感じることも多いはず。

そこで登場するのが、PostgreSQLの強力な武器「PL/pgSQL」です。これを使うと、まるでプログラミングをするように、データベースの中で「もし〜なら、こうする」といった柔軟な動きを作れるようになります。

今日は、その基本中の基本である「変数」と「データ型」について、肩の力を抜いてお話ししますね。

—

変数は「中身を出し入れできる箱」

PL/pgSQLで最もよく使うのが「変数」です。これは、「一時的に情報を入れておくための箱」だと思ってください。

例えば、計算結果を一時的に置いておいたり、ユーザーの名前を記憶しておいたり。この「箱」に名前をつけて、中身を出し入れしていくのが基本スタイルです。

宣言と代入の作法

箱を使うには、まず「どんな箱を使うか」を宣言する必要があります。

DO $$
DECLARE
user_age INTEGER := 25; — 整数を入れる「user_age」という箱を用意
BEGIN
— ここで何か処理をする
END $$;

ここで注目してほしいのは `:=` という記号です。多くのプログラミング言語では `=` を使いますが、PL/pgSQLでは「代入しますよ!」という意思表示として `:=` を使うのがルールなんです。ちょっとしたこだわりですね。

—

賢い開発者は「動的」に型を決める(%TYPEと%ROWTYPE)

さて、ここからが少し「エンジニアっぽい」お話です。

普通、変数は「数字を入れる」「文字を入れる」と最初に決めておきますよね。でも、もしテーブルの定義が変わって、年齢を入れる箱の桁数が増えたらどうしますか?いちいち修正するのは面倒だし、ミスのもとです。

そんなとき、PostgreSQLには「そのテーブルの列と同じ型にしてね」と丸投げできる便利な機能があるんです。

1. %TYPE:特定の列に合わせる

「この変数は、usersテーブルのage列と同じ型にして!」と指示できます。

DECLARE
user_age users.age%TYPE;

これなら、もし後から `age` が整数から文字に変わっても、コードを書き直す必要はありません。賢いですよね。

2. %ROWTYPE:テーブルの「行」を丸ごと抱える

テーブルの列が10個も20個もあったら、全部の型を宣言するのは大変です。そんなときは「この箱はusersテーブルの1行分そのものだよ!」と宣言してしまいましょう。

DECLARE
user_record users%ROWTYPE;

こうすると、`user_record.name` や `user_record.email` のように、テーブルの項目をそのままドットで繋いで呼び出せるようになります。まるで魔法みたいでしょう?

—

知っておきたい「スコープ」の境界線

最後に、少しだけ「スコープ(変数の有効範囲)」についても触れておきますね。

変数は、「宣言したブロックの中」でしか生きられません。例えば、大きな処理の中に小さなブロックを作った場合、外側で作った変数は内側で使えますが、内側で作った変数は外側からは見えません。

これは、お家の中で例えると分かりやすいかも。

  • リビング(外側)で決めたルールは、子ども部屋(内側)でも通用する。
  • 子ども部屋(内側)専用の箱は、リビングからは見えない。

この「見えない場所がある」というルールのおかげで、プログラムが複雑になっても名前の衝突が起きず、安全に動くようになっているんです。

—

さいごに

いかがでしたか?
「変数」と聞くと難しく感じるかもしれませんが、要は「情報の整理整頓」のための道具です。

まずはあまり深く考えず、`DECLARE` で箱を用意して、`:=` で物を入れてみる。それだけでも、SQLの世界がグッと広がるはずですよ。

もし途中でエラーが出ても、それはデータベースが「もう少し詳しく教えて!」と言っているだけ。怖がらずに、ぜひ色々と試してみてくださいね。

それでは、また次回の記事でお会いしましょう!Happy Coding!

コメント

タイトルとURLをコピーしました