ORACLE SQL リファレンス(逆引き)

ORACLE SQL リファレンス

Web oracle.se-free.com
ストアドパッケージ(PACKAGE)
スポンサード リンク

ストアドパッケージの構文
●パッケージ仕様部
CREATE OR REPLACE PACKAGE パッケージ名 { AS | IS }
 プロシージャ定義;
 ファンクション定義;
 変数定義;
 データ型定義;
 例外定義;
 カーソル定義;
END [ パッケージ名 ];

●パッケージ本体
CREATE OR REPLACE PACKAGE BODY パッケージ名 { AS | IS }
 パッケージ仕様部のプロシージャ定義に対応したプログラム;
 パッケージ仕様部のファンクション定義に対応したプログラム;
 パッケージ本体内部から呼ばれるプロシージャプログラム;
 パッケージ本体内部から呼ばれるファンクションプログラム;
END [パッケージ名];

ストアドパッケージは、パッケージ仕様部とパッケージ本体の2つから構成されます。

●パッケージ仕様部
パッケージ外部またはパッケージ全体からアクセス可能な、プロシージャ、ファンクション、変数、例外、データ型、カーソルを定義します。
プロシージャやファンクションはインターフェースの定義のみ記述し、内部のプログラムは、パッケージ本体に記述します。

●パッケージ本体
パッケージ仕様部で定義した、プロシージャやファンクションに対応するプログラムを記述します。
また、パッケージ本体内部からのみアクセス可能な、プロシージャやファンクションも記述します。



スポンサード リンク


例1) パッケージ仕様部の定義
create or replace package dept_utl as

  -- ファンクションget_dept_name の定義
 function get_dept_name(v_dept_id in char) return varchar2;
  -- プロシージャinsert_deptの定義
 procedure insert_dept(v_dept_id in char,v_dept_name in varchar2);
  -- 例外e_deptNotFoundの定義
 e_deptNotFound exception;

end dept_utl;


例2) 例1のパッケージ本体の定義
create or replace package body dept_utl as

 -- ファンクション get_dept_nameの本体
 function get_dept_name(v_dept_id in char) return varchar2 as
  v_dept_name varchar2(10);
 begin
  select dept_name into v_dept_name from dept 
   where dept_id = v_dept_id;
  if sql%notfound then
   raise e_deptNotFound;
  end if;
  return v_dept_name;
 end get_dept_name;

 -- プロシージャ insert_deptの本体
 procedure insert_dept(v_dept_id in char,v_dept_name in varchar2) as
 begin
  insert into dept values(v_dept_id,v_dept_name);
  commit;
 end insert_dept;

end dept_utl;


例3) SQLから上記パッケージの関数「get_dept_name」呼び出す
SQL> select dept_utl.get_dept_name('D01') from dual;

DEPT_UTL.GET_DEPT_NAME('D01')
-----------------------------------------------------------------------

総務

SQL>


例4) 上記例のパッケージのプロシージャを無名ブロックから実行する。
declare

begin

 dept_utl.insert_dept('D04','営業');

end;

スポンサード リンク


無名ブロック
ストアドプロシージャ(PROCEDURE)
ストアドファンクション(FUNCTION)
ストアドパッケージ(PACKAGE)
トリガー(TRIGGER)
PL/SQLのデータ型
PL/SQLの演算子(計算、代入、結合、連結、指数、比較)
PL/SQLの変数と定数
%TYPE属性と%ROWTYPE属性
PL/SQLの組み込み関数
PL/SQLの実行権限(AUTHID)
PL/SQLを独立したトランザクションで実行する

PL/SQL へ
忘れっぽいエンジニアのオラクルSQLリファレンス TOPへ