こんにちは!データベースの世界へようこそ。
普段、PostgreSQLで「いつものSQL文」を何度も書いていて、「あー、これ毎回同じことやるの面倒だな……」なんて思ったことはありませんか?例えば、消費税を計算したり、文字列を特定の形に整えたり。
そんな時に大活躍するのが「ユーザー定義関数(UDF)」です。今日は、この便利な魔法の道具を一緒に作ってみましょう。
—
そもそも「ユーザー定義関数」ってなに?
料理で例えるなら、「いつもの手順を『レシピ』としてメモしておくこと」です。
毎日同じ手順でカレーを作るとき、いちいち「玉ねぎを切って、炒めて、肉を入れて……」と頭の中で考えなくても、「いつものカレーのレシピ」さえあれば、名前を呼ぶだけで料理が始まりますよね。
PostgreSQLにおける関数も同じです。「このデータを受け取ったら、こう加工して返してね」という手順をデータベースの中に保存しておき、あとで名前を呼ぶだけでその処理を実行できる仕組みなんです。
—
早速作ってみよう:CREATE FUNCTION
関数を作るには `CREATE FUNCTION` というコマンドを使います。まずは、「入力した数値を2倍にして返す」という単純な関数を作ってみましょう。
CREATE FUNCTION double_it(num integer)
RETURNS integer AS $$
BEGIN
RETURN num 2;
END;
$$ LANGUAGE plpgsql;
見ての通り、いくつか決まり文句があります。
- `double_it(num integer)`: これが「関数の名前」と「受け取る引数」です。「`num` という名前で、整数(integer)を一つちょうだい」と言っています。
- `RETURNS integer`: 「最後には整数を返すよ」と宣言しています。
- `$$ … $$`: ここが料理の「手順書」です。この中に実際の処理を書きます。
- `LANGUAGE plpgsql`: 「どういう言葉(プログラミング言語)で手順を書いたか」を伝えます。PostgreSQLにはお馴染みの `plpgsql` を使えば間違いありません。
これだけで、`SELECT double_it(10);` と打てば「20」という答えが返ってくるようになります。便利でしょう?
—
ちょっと便利な「オーバーロード」の話
ここが面白いところなのですが、PostgreSQLの関数は「名前が同じでも、中身が違えば別物」として扱えます。これを「オーバーロード」と呼びます。
例えば、「数値を2倍にする関数」と「文字列を2回繰り返す関数」、両方に `double_it` という名前をつけても大丈夫なんです。
— 数値用
CREATE FUNCTION double_it(num integer) …
— 文字列用
CREATE FUNCTION double_it(text_val text) …
こうしておけば、`double_it(10)` と書けば数字を計算し、`double_it(‘やっほー’)` と書けば「やっほーやっほー」と返してくれる。使う側は名前を一つ覚えるだけでいいので、とっても楽ですよね。
—
用が済んだら片付けよう:DROP FUNCTION
「あ、この関数もう使わないや」という時は、忘れずに掃除(削除)しておきましょう。
DROP FUNCTION double_it(integer);
ここで注意点が一つ。関数を削除するときは、「どの引数を受け取る関数か」をちゃんと指定してあげる必要があります。そうしないと、さっきのオーバーロードみたいに「どっちの `double_it` を消せばいいの?」とデータベースが迷子になってしまいますからね。
—
終わりに
ユーザー定義関数を使えるようになると、データベースは単なる「データの箱」から、「あなたの代わりに仕事をしてくれる優秀な助手」に変わります。
最初は難しく感じるかもしれませんが、まずは「いつもの計算を一つ関数にしてみる」ところから始めてみてください。その小さな一歩が、あなたのデータベース管理を劇的に楽にしてくれるはずですよ!
わからないことがあれば、いつでもまた聞きに来てくださいね。応援しています!
コメント