パッケージの実装の詳細は、パッケージ本体にあります。 パッケージ本体には、パッケージユーザーから見えないオブジェクトが含まれている場合があります。
次の構文は、パッケージ本体を定義するために使用されます。
CREATE [ OR REPLACE ] PACKAGE BODY package_name
{ IS | AS }
[ private_declaration; ] ...
[ procedure_or_function_definition ] ...
[ package_initializer ]
[ package_name ] ;
ここでは、
procedure_or_function_definition :=
procedure_definition | function_definition
ここでは、
procedure_definition :=
PROCEDURE proc_name[ argument_list ]
[ options_list ]
{ IS | AS }
procedure_body
END [ proc_name ] ;
ここでは、
procedure_body :=
[ declaration; ] [, ...]
BEGIN
statement; [...]
[ EXCEPTION
{ WHEN exception [OR exception] [...]] THEN statement; }
[...]
]
ここでは、
function_definition :=
FUNCTION func_name [ argument_list ]
RETURN rettype [DETERMINISTIC]
[ options_list ]
{ IS | AS }
function_body
END [ func_name ] ;
ここでは、
function_body :=
[ declaration; ] [, ...]
BEGIN
statement; [...]
[ EXCEPTION
{ WHEN exception [ OR exception ] [...] THEN statement; }
[...]
]
ここでは、
argument_list :=
( argument_declaration [, ...] )
ここでは、
argument_declaration :=
argname [ IN | IN OUT | OUT ] argtype [ DEFAULT value ]
ここでは、
options_list :=
option [ ... ]
ここでは、
option :=
STRICT
LEAKPROOF
COST execution_cost
ROWS result_rows
SET config_param { TO value | = value | FROM CURRENT }
ここでは、
package_initializer :=
BEGIN
statement; [...]
END;
パラメーター
パラメーター | 説明 |
---|---|
package_name | このパッケージ本体が属するパッケージの名前。 この名前でパッケージ仕様を定義しておく必要があります。 |
private_declaration | パッケージ内の任意のプロシージャまたは関数からアクセスできるプライベート変数の識別子。 ゼロ、1、またはそれ以上のプライベート変数が存在します。 有効値:
|
proc_name | 作成するプロシージャの名前。 |
PRAGMA AUTONOMOUS_TRANSACTION | 関数を自律型トランザクションとして設定するコマンド。 |
declaration | 変数、型、REF CURSOR、またはサブプログラム宣言。 サブプログラム宣言が含まれている場合は、他のすべての変数、型、および REF CURSOR 宣言の後に宣言する必要があります。 |
statement | 構造化プロセス言語 (SPL) プログラム文。 DECLARE-BEGIN-END ブロックは、SPL 文の一部と見なされます。 したがって、関数本体にはネストされたブロックが含まれる場合があります。 |
exception | 例外条件名。 例: NO_DATA_FOUND、OTHERS。 |
func_name | 作成する関数の名前。 |
rettype | 戻り値のデータ型は、argtype でリストされた任意の型です。 argtype は、rettype の長さを指定することはできません。 |
DETERMINISTIC | 同じ引数値を入力すると、関数は常に同じ結果を返すことを指定します。 DETERMINISTIC 関数を使用してデータベースを変更することはできません。
注
|
PRAGMA AUTONOMOUS_TRANSACTION | 関数を自律型トランザクションとして設定するコマンド。 |
declaration | 変数、型、REF CURSOR、またはサブプログラム宣言。 サブプログラム宣言が含まれている場合は、他のすべての変数、型、および REF CURSOR 宣言の後に宣言する必要があります。 |
argname | 仮引数の名前。 引数は、プロシージャ本体内でこの名前によって参照されます。 |
IN | IN OUT | OUT | 引数モード。 IN: 引数は入力にのみ使用されます。 この値がデフォルトです。 IN OUT: 引数は、値を受け取り、値を返すために使用されます。 OUT: 引数は出力にのみ使用されます。 |
argtype | 引数のデータ型。 引数の型は、基本データ型、%TYPE を使用する既存の列の型のコピー、またはネストしたテーブルやオブジェクト型などのユーザー定義型にすることができます。
基本データ型には長さを指定することはできません。 たとえば、データ型として VARCHAR2(10) ではなく VARCHAR2 を指定する必要があります。
tablename.columnname%TYPE を記述して、列の型を参照します。 これにより、プロシージャをテーブルの定義の変更から独立させることができます。 |
DEFAULT value | プロシージャを呼び出すときに入力引数が指定されていない場合には、DEFAULT 句は入力引数のデフォルト値を提供します。 IN OUT または OUT モードの引数に
DEFAULT を指定することはできません。
注 次のオプションは、Oracle データベースと互換性がありません。 これらは、ApsaraDB PolarDB によって提供される Oracle パッケージ構文の拡張機能にすぎません。
|
STRICT | STRICT キーワードは、NULL 引数を指定して関数を呼び出した場合に、関数が実行されないことを指定します。 関数は代わりに NULL を返します。 |
LEAKPROOF | LEAKPROOF キーワードは、戻り値を除いて、関数が引数に関する情報を公開しないことを指定します。 |
PARALLEL { UNSAFE | RESTRICTED | SAFE } | PARALLEL 句を使用すると、並列モードで並列順次スキャンを使用することができます。 シリアル順次スキャンとは異なり、並列順次スキャンは複数のワーカーを使用して、照会中にリレーションを並行してスキャンします。
有効値:
|
execution_cost | このパラメーターは、関数の推定実行コストを指定します。 値は正の整数である必要があります。 単位: cpu_operator_cost。 関数がセットを返す場合には、これは返された行ごとの実行コストのコレクションです。 デフォルト値は 0.0025 です。 |
result_rows | クエリプランナーが関数が返すと予想する行の推定数。 デフォルト値は 1000 です。 |
SET | SET 句は、関数の実行中にパラメーター値を設定するのに役立ちます。
|
package_initializer | package_initializer の文は、パッケージが最初に参照されるときに、セッションごとに 1 回実行されます。
注 STRICT、LEAKPROOF、PARALLEL、COST、ROWS、SET キーワードは、ApsaraDB PolarDB に拡張機能を提供できますが、Oracle
ではサポートされていません。
|