CREATE PACKAGE BODY パッケージ本体を作成するSQL

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;

関連SQL