ストアドプロシージャとファンクション
PL/SQLでは、ストアドプロシージャとファンクションを使用して、再利用可能なコードブロックをデータベース内に保存し、必要に応じて呼び出すことができます。これにより、コードの再利用性と保守性が向上します。
ストアドプロシージャ
ストアドプロシージャは、特定のタスクを実行するための一連のSQLステートメントを含むプログラムユニットです。ストアドプロシージャは、呼び出されたときに一度に実行され、複雑なビジネスロジックをデータベース内で効率的に処理します。
ストアドプロシージャの作成と呼び出し
例: ストアドプロシージャの作成
-- ストアドプロシージャの作成
CREATE OR REPLACE PROCEDURE greet_user (p_name IN VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, ' || p_name || '!');
END;
例: ストアドプロシージャの呼び出し
-- ストアドプロシージャの呼び出し
BEGIN
greet_user('Alice');
END;
ファンクション
ファンクションは、特定の値を計算して返すためのプログラムユニットです。ファンクションは、呼び出されると値を返す点がストアドプロシージャと異なります。ファンクションは、SELECT文の中やPL/SQLブロック内で使用できます。
ファンクションの作成と呼び出し
例: ファンクションの作成
-- ファンクションの作成
CREATE OR REPLACE FUNCTION get_double (p_number IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN p_number * 2;
END;
例: ファンクションの呼び出し
-- ファンクションの呼び出し
DECLARE
v_result NUMBER;
BEGIN
v_result := get_double(5);
DBMS_OUTPUT.PUT_LINE('Double of 5 is ' || v_result);
END;
IN、OUT、IN OUTパラメータ
ストアドプロシージャとファンクションは、パラメータを使用してデータを受け渡すことができます。パラメータには、IN、OUT、IN OUTの3種類があります。
- INパラメータ: 呼び出し元からプロシージャやファンクションに値を渡すためのパラメータ。呼び出し元で変更しても影響を受けません。
- OUTパラメータ: プロシージャやファンクションから呼び出し元に値を返すためのパラメータ。呼び出し元で使用される前に、プロシージャやファンクション内で初期化される必要があります。
- IN OUTパラメータ: 呼び出し元から値を受け取り、プロシージャやファンクション内でその値を変更し、変更後の値を呼び出し元に返すためのパラメータ。
例: IN、OUT、IN OUTパラメータの使用
-- ストアドプロシージャの例(IN、OUTパラメータ)
CREATE OR REPLACE PROCEDURE calculate_area (
p_radius IN NUMBER,
p_area OUT NUMBER
) IS
BEGIN
p_area := 3.14 * p_radius * p_radius;
END;
-- 呼び出し例
DECLARE
v_radius NUMBER := 5;
v_area NUMBER;
BEGIN
calculate_area(v_radius, v_area);
DBMS_OUTPUT.PUT_LINE('Area of circle: ' || v_area);
END;
ストアドプロシージャとファンクションの違い
- ストアドプロシージャ: 特定のタスクを実行するためのプログラムユニットで、値を返す必要はありません。
- ファンクション: 特定の値を計算して返すプログラムユニットで、必ず値を返す必要があります。