PL/SQL - 関数:初級者ガイド
こんにちは、志を抱くプログラマーさんたち!今日は、PL/SQL関数の世界に楽しく飛び込んでみましょう。コードを書いたことがない人も心配しないでください。私はあなたの親切なガイドとして、一歩一歩進んでいきます。このチュートリアルの終わりまでに、プロのように関数を作成し、呼び出すことができるようになるでしょう!
PL/SQL関数とは?
まず、関数とは何かを理解しましょう。関数はコードの中の小さな助け舟です。メインプログラムの中のミニプログラムのように、特定のタスクを実行します。情報(これを入力またはパラメータと呼びます)を渡すと、それを基に処理を行い、結果を返します。
例えば、円の面積を計算できるロボットアシスタント(FunctionBotと呼びましょう)を思い浮かべてください。FunctionBotに円の半径を伝えると、すぐに計算を行い、面積を教えてくれます。これがプログラミングにおける関数の基本的な役割です!
関数の作成
それでは、PL/SQLで自分の関数を作成する方法を学びましょう。基本的な構造は以下の通りです:
CREATE [OR REPLACE] FUNCTION 関数名
[(パラメータ名 [IN | OUT | IN OUT] 型 [, ...])]
RETURN 返り値の型
IS
-- 宣言セクション
BEGIN
-- 実行セクション
RETURN (値);
END;
/
これを見て驚かないでください!以下に分解します:
-
CREATE [OR REPLACE] FUNCTION
:Oracleに新しい関数を作成(または既存のものを置き換える)ことを伝えます。 -
関数名
:自分の関数に名前を付けます。 -
(パラメータ名 [IN | OUT | IN OUT] 型 [, ...])
:関数が受け取る入力を指定します。 -
RETURN 返り値の型
:関数が返すデータの型を指定します。 -
IS
:関数ヘッダと本体を区切るキーワードです。 -
BEGIN
とEND
キーワードは、関数の主要なコードをくくります。 -
RETURN (値)
:関数が返すべきものを指定します。
それでは、円の面積を計算するシンプルな関数を作成してみましょう:
CREATE OR REPLACE FUNCTION calculate_circle_area(radius NUMBER)
RETURN NUMBER
IS
pi CONSTANT NUMBER := 3.14159265359;
area NUMBER;
BEGIN
area := pi * radius * radius;
RETURN area;
END;
/
この関数では以下のことが行われています:
-
calculate_circle_area
という名前の関数を作成しています。 - 1つの入力パラメータ:
radius
(型はNUMBER)を受け取ります。 - NUMBER(円の面積)を返します。
-
pi
という定数を定義しています。 - 円の面積の公式(π * r^2)を使って計算を行います。
- 最後に計算された面積を返します。
関数の呼び出し
関数を作成したら、どのように使用するのでしょうか?これは「関数の呼び出し」と呼ばれます。PL/SQLでは、関数を以下のような方法で呼び出すことができます:
1. SELECT文内で:
SELECT calculate_circle_area(5) AS circle_area FROM DUAL;
これは半径5の円の面積を返します。
2. PL/SQLブロック内で:
DECLARE
result NUMBER;
BEGIN
result := calculate_circle_area(7);
DBMS_OUTPUT.PUT_LINE('円の面積は: ' || result);
END;
/
これは半径7の円の面積を計算し、結果を表示します。
3. より大きな式の一部として:
DECLARE
radius NUMBER := 10;
diameter NUMBER;
BEGIN
diameter := 2 * radius;
DBMS_OUTPUT.PUT_LINE('直径 ' || diameter || ' の円の面積は: ' || calculate_circle_area(radius));
END;
/
これは直径を計算し、その円の面積を求めます。
PL/SQL再帰関数
それでは、もう少し高度な話題に進みましょう:再帰関数。再帰関数は、自分自身を呼び出す関数です。ロシアのメイキャップ人形のように、開けると中に別の人形が現れます!
以下は、数の階乗を計算する再帰関数の例です。5の階乗(5!と書かれます)は5 4 3 2 1 = 120です。
それでは、階乗を計算する再帰関数を書いてみましょう:
CREATE OR REPLACE FUNCTION factorial(n NUMBER)
RETURN NUMBER
IS
BEGIN
IF n = 0 OR n = 1 THEN
RETURN 1;
ELSE
RETURN n * factorial(n - 1);
END IF;
END;
/
これを分解すると:
- nが0または1の場合、1を返します(これは基準ケースです)。
- それ以外の場合、nを(n-1)の階乗に乗じて返します。
- この関数は自分自身を呼び出し続け、基準ケースに達するまで続けます。
この関数を使うには以下のようにします:
BEGIN
DBMS_OUTPUT.PUT_LINE('5の階乗は: ' || factorial(5));
END;
/
これは「5の階乗は: 120」と表示します。
普通のPL/SQL関数メソッド
以下に、PL/SQL関数でよく使われるメソッドの一覧を示します:
メソッド | 説明 | 例 |
---|---|---|
CREATE FUNCTION | 新しい関数を作成 | CREATE FUNCTION my_func... |
REPLACE FUNCTION | 既存の関数を置き換え | CREATE OR REPLACE FUNCTION my_func... |
RETURN | 返り値の型と値を指定 | RETURN NUMBER; ... RETURN result; |
CALL | 関数を呼び出す | SELECT my_func(5) FROM DUAL; |
DROP FUNCTION | 関数を削除 | DROP FUNCTION my_func; |
EXECUTE | 関数を実行 | EXECUTE my_func(10); |
練習は完璧を生みます!これらの関数を試してみてください。入力を変更したり、関数を組み合わせたり、独自の関数を作成してみてください。これらを弄ぶことで、どのように動作するかをより理解することができます。
そして、ここまででPL/SQL関数の世界への第一歩を踏み出しました。シンプルな計算から再帰的な問題解決まで、関数はあなたのコードを効率的にし、管理しやすくする強力なツールです。探索を続け、コードを書き続け、そして何より楽しむことを忘れずに!
Credits: Image by storyset