CREATE PACKAGE BODYとは、パッケージ本体を作成するSQL文である。

「警告: パッケージが作成されましたが、コンパイル・エラーがあります。」と表示された場合は、SQL*PlusSHOW ERRORSコマンドを実行すると、コンパイル・エラーの内容が表示される。

CREATE [OR REPLACE] PACKAGE BODY [schema.]package {IS|AS}
  [declare ...]
[BEGIN
  body]
END [package];
schema

パッケージを作成するスキーマの名前を指定する。自分のスキーマにパッケージを作成する場合は、スキーマ名の指定は省略できる。

package

作成するパッケージの名前を指定する。

declare

変数などを宣言する。

body

パッケージ本体を記述する。

プロシージャの定義

PROCEDURE procedure([param [,param...]]) IS
    declare
BEGIN
    statements
[EXCEPTION
    handlers]
END [procedure];
procedure

プロシージャの名前を指定する。

param

プロシージャの引数を指定する。

declare

プロシージャで使用する変数などの宣言を行う。

statements

プロシージャの処理を記述する。

handlers

例外が発生したときに実行する処理を記述する。

ファンクションの定義

FUNCTION function([param [,param...]]) RETURN type IS
    declare
BEGIN
    statements
[EXCEPTION
    handlers]
END [function];
function

ファンクションの名前を指定する。

param

ファンクションの引数を指定する。

type

ファンクションの戻り値のデータ型を指定する。

declare

ファンクションで使用する変数などの宣言を行う。

statements

ファンクションの処理を記述する。

handlers

例外が発生したときに実行する処理を記述する。

CREATE OR REPLACE PACKAGE BODY employee IS
    PROCEDURE set_ename(
        i_empno IN NUMBER,
        i_ename IN VARCHAR2
    ) IS
    BEGIN
        UPDATE emp SET ename = i_ename WHERE empno = i_empno;
    EXCEPTION
        WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE(ERRM);
    END;

    FUNCTION get_ename(i_empno IN NUMBER) RETURN VARCHAR2 IS
        employee_name VARCHAR2(20);
    BEGIN
        SELECT ename INTO employee_name FROM emp WHERE empno = i_empno;
        RETURN employee_name;
    EXCEPTION
        WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE(ERRM);
            RETURN NULL;
    END;
END;
スポンサーリンク