SQL DDL:ストアド定義

ストアドプロシージャ定義

CREATE OR REPLACE PROCEDURE MyProcedure
(
 prm IN NUMBER,
 ret OUT NUMBER
) AS

BEGIN

 ret:=prm*100;

EXCEPTION
 WHEN OTHERS THEN
  ret:=0;
END;

CREATE PROCEDURE ストアド名 引数 型情報 AS
  SELECT 列名 FROM 表名 WHERE 列名 = 引数

ストアドファンクション定義

CREATE OR REPLACE FUNCTION MyFunction
(
 PRM IN VARCHAR1
)
RETURN VARCHAR2 AS

 RET VARCHAR2(4);

BEGIN
 
 RET := PRM;
 
 RETURN RET;
 
EXCEPTION
 WHEN OTHERS THEN
  RETURN NULL;

END MyFunction;

パッケージ

・ストアドプロシージャ
・ストアドファンクション
を分類する為の名称
Javaのパッケージそのもの
.NETで言う名前空間

【定義】

仕様部
パッケージに含まれるファンクション(プロシージャ)の名前と引数、戻り値のみを定義

CREATE [OR REPLACE] PACKAGE (パッケージ名) AS

 FUNCTION ファンクション名(引数1 IN 型1, 引数2 IN 型2) RETURN 戻り値型;

 PROCEDURE プロシージャ名(引数1 IN 型1, 引数2 IN 型2);

END;

BODY部
実ファンクション(プロシージャ)、グローバル変数

CREATE [OR REPLACE] PACKAGE BODY パッケージ名 AS

 グローバル変数
 変数名 型;

 FUNCTION ファンクション名(引数1 IN 型1, 引数2 IN 型2) RETURN 戻り値型
  IS
   ~
  END ファンクション名;

 PROCEDURE プロシージャ名(引数1 IN 型1, 引数2 IN 型2)
  IS
   ~
  END プロシージャ名;

END パッケージ名;

【削除】
DROP PACKAGE <パッケージ名>;
DROP PACKAGE BODY <パッケージ名>;

ストアドプログラムの呼び出し

SQL> execute ストアド名('~', '~');
SQL> exe ストアド名('~', '~');
SQL> execute パッケージ.ストアド名('~', '~');

EXECUTE ストアド名
  @Prm1 = @SyoriYMD1,
  @Prm2 = 1000,
  @Prm3 = 'TEST'