- パッケージ仕様:公開インターフェースです。 これは、パッケージの外部で参照できる要素です。 仕様では、パッケージの一部となるすべてのデータベースオブジェクトを宣言しています。
- パッケージ本体:パッケージ仕様内で宣言されたすべてのデータベースオブジェクトの具体的な実装が含まれます。
パッケージ本体は、パッケージ仕様の詳細を実装しています。 実装の詳細と、アプリケーションからは見えないプライベート宣言が含まれています。 仕様を変更せずに、パッケージ本体をデバッグ、拡張、または置換できます。 同様に、実装の詳細はアプリケーションから見えないため、呼び出し側プログラムを再コンパイルせずに本文を変更することができます。
パッケージ仕様構文
パッケージ仕様は、パッケージ (API) のユーザーから見えるインターフェイスを定義します。 仕様には、パッケージのユーザーから見える関数、プロシージャ、データ型、例外、およびカーソルがリストされています。
CREATE [ OR REPLACE ] PACKAGE package_name
[ authorization_clause ]
{ IS | AS }
[ declaration; ] ...
[ procedure_or_function_declaration; ] ...
END [ package_name ] ;
{ AUTHID DEFINER } | { AUTHID CURRENT_USER }
procedure_declaration | function_declaration
PROCEDURE proc_name [ argument_list ] [ restriction_pragma ];
FUNCTION func_name [ argument_list ]
RETURN rettype [ restriction_pragma ];
( argument_declaration [, ... ] )
argname [ IN | IN OUT | OUT ] argtype [ DEFAULT value ]
PRAGMA RESTRICT_REFERENCES(name, restrictions)
restriction [, ... ]
パラメーター
パラメーター | 説明 |
---|---|
package_name | package_name はパッケージに割り当てられた識別子であり、各パッケージにはスキーマ内で一意の名前が必要となります。 |
AUTHID DEFINER | AUTHID 句を省略した場合、または AUTHID DEFINER を指定した場合には、パッケージ所有者の権限を使用してデータベースオブジェクトへのアクセス権限を決定し、パッケージ所有者の検索パスを使用して非修飾データベースオブジェクトの参照を解決します。 |
AUTHID CURRENT_USER | AUTHID CURRENT_USER を指定した場合には、パッケージ内のプログラムを実行する現在のユーザーの権限を使用して、データベースオブジェクトへのアクセス権限を決定し、パッケージ内のプログラムを実行する現在のユーザーの検索パスを使用して、修飾されていないデータベースオブジェクトの参照を解決します。 |
declaration | declaration はパブリック変数の識別子です。 パブリック変数は、package_name.variable 構文を使用して、パッケージの外部からアクセスすることができます。 0、1、またはそれを超えるパブリック変数が存在します。 パブリック変数の定義は、プロシージャまたは関数の宣言の前に置く必要があります。
declaration は次のタイプのいずれかになります。
|
argname | 引数の名前。 引数は、関数またはプロシージャ本体内でこの名前によって参照されます。 |
IN | IN OUT | OUT | 引数モード。
|
argtype |
引数のデータ型。 引数の型は、基本データ型、 列のタイプは、 |
DEFAULT value | DEFAULT 句は、呼び出しで指定されていない場合の、入力引数のデフォルト値を提供します。 IN OUT または OUT モードの引数には DEFAULT を指定することができません。
|
name | name は、関数またはプロシージャの名前です。
|
restriction | 次のキーワードは互換性を保つため使用できますが、無視されます。
|
パッケージ本体の構文
CREATE [ OR REPLACE ] PACKAGE BODY package_name
{ IS | AS }
[ private_declaration; ] ...
[ procedure_or_function_definition; ] ...
[ package_initializer ]
END [ package_name ] ;
procedure_definition | function_definition
PROCEDURE proc_name [ argument_list ] [ options_list ] { IS | AS }
procedure_body END [ proc_name ] ;
[ declaration; ] [, ... ] BEGIN
statement; [ ... ] [ EXCEPTION
{ WHEN exception [ OR exception ] [...] ] THEN statement; } [...]
]
FUNCTION func_name [ argument_list ] RETURN rettype [ DETERMINISTIC ] [ options_list ] { IS | AS }
function_body END [ func_name ] ;
[ declaration; ] [, ... ] BEGIN
statement; [ ... ]
[ EXCEPTION
{ WHEN exception [ OR exception ] [ ... ] THEN statement; } [ ... ]
]
( argument_declaration [, ... ] )
argname [ IN | IN OUT | OUT ] argtype [ DEFAULT value ]
option [ ... ]
COST execution_cost ROWS result_rows
SET config_param { TO value | = value | FROM CURRENT }
BEGIN
statement; [... ] END;
パラメーター
パラメーター | 説明 |
---|---|
package_name | package_name は、パッケージ本体の名前です。 この名前のパッケージ定義が存在することが前提です。 |
private_declaration | private_declaration は、パッケージ内の任意のプロシージャまたは関数からアクセスできるプライベート変数の識別子です。 0、1、またはそれを超えるプライベート変数が存在します。private_declaration
は、次のタイプのいずれかになります。
|
proc_name | 作成するプロシージャの名前。 |
declaration | 変数、型、または REF CURSOR 宣言。 |
statement | SPL プログラム文。 DECLARE - BEGIN - END ブロックは、それ自体がSPL 文と見なされることにご注意ください。 したがって、関数本体にはネストされたブロックが含まれる場合があります。 |
exception | NO_DATA_FOUND や OTHERS などの例外条件名。 |
func_name | 作成される関数の名前。 |
rettype | 戻り値のデータ型は、argtype にリストされている任意の型です。 argtype については、rettype に長さを指定することはできません。 |
DETERMINISTIC | DETERMINISTIC を組み込んで、同じ引数値が与えられたときに関数が常に同じ結果を返すように指定します。 DETERMINISTIC 関数はデータベースを更新することはできません。
注 DETERMINISTIC キーワードは、PostgreSQL の
IMMUTABLE オプションと同等です。
|
declaration | 変数、型、または REF CURSOR 宣言。 |
argname | 仮引数の名前。 引数は、プロシージャ本体内でこの名前によって参照されます。 |
IN | IN OUT | OUT | 引数モード。
|
argtype |
引数のデータ型。 引数の型は、基本データ型、 列のタイプは、tablename.columnname%TYPE と記述することによって参照されます。 tablename.columnname%TYPE を使用すると、プロシージャをテーブルの定義の変更から独立させることができます。 |
DEFAULT value | DEFAULT 句は、プロシージャ呼び出しで入力引数が提供されていない場合には、入力引数のデフォルト値を提供します。 IN OUT または OUT モードの引数には DEFAULT を指定することができません。
注 次のオプションは、Oracle データベースと互換性がありません。 これらは、Oracle 互換 PolarDB によってのみ提供される Oracle パッケージ構文の拡張機能です。
|
STRICT | STRICT キーワードは、NULL 引数を指定して呼び出された場合は、関数が実行されないことを指定します。 代わりに、関数は NULL を返します。
|
LEAKPROOF | LEAKPROOF キーワードは、関数が戻り値を介して以外に、引数に関する情報を公開しないことを指定します。 |
execution_cost | execution_cost は、関数の推定実行コストを示す正の数を cpu_operator_cost の単位で指定します。 関数がセットを返す場合、これは返される行ごとのコストです。 デフォルト値:0.0025。 |
result_rows | result_rows は、クエリプランナーが関数から返されると予想する行の推定数です。 デフォルト値:1000。 |
SET | 関数の期間のパラメーター値を指定するには、SET 句を使用します。
|
package_initializer | package_initializer の文は、パッケージが最初に参照されるときに、ユーザーのセッションごとに 1 回実行されます。 |