ストアード・プロシージャーへのクロスデータベース・アクセス
CREATE [OR REPLACE] PROCEDURE コマンドを使用してストアード・プロシージャーを作成すると、接続しているデータベースとスキーマにプロシージャーが追加されます。 ストアード・プロシージャーが定義されているデータベースに接続している間、このプロシージャーにアクセスすることができます。
- 別のデータベース内にあるプロシージャー・オブジェクトを呼び出すときに完全修飾オブジェクト名を使用する。例えば、次のようにします。
MYDB.SCHEMA(ADMIN)=> EXEC OTHERDB.SCHEMA.UPDATEACCT(); - 同一のデータベースの別のスキーマ内にあるプロシージャー・オブジェクトを呼び出すときにスキーマ・オブジェクト名を使用する。
MYDB.SCHEMA(ADMIN)=> EXEC SCH_TWO.UPDATEACCT(); - 完全修飾ではないプロシージャー名を検索するデータベースまたはスキーマ、あるいはその両方の指定に PATH SQL セッション変数を使用する。 PATH セッション変数を使用するには、次のようなコマンドを入力します。
MYDB.SCHEMA(ADMIN)=> SET PATH = <elem> [, <elem>];<elem> の値には、データベース、スキーマ、または変数 CURRENT_CATALOG、CURRENT_USER、CURRENT_SCHEMA、または CURRENT_PATH を指定します。 <elem> として指定するものは、データベース名を解決するものでなければなりません。
例:
MYDB.SCHEMA(ADMIN)=> SET PATH = mydb, nzdb, customer; SET VARIABLEPATH の値を表示するには、以下のコマンドを使用します。
MYDB.SCHEMA(ADMIN)=> SELECT CURRENT_PATH; CURRENT_PATH ------------------ MYDB,NZDB,CUSTOMER (1 row)
Netezza Performance Serverシステムは、修飾されていないプロシージャを検索するときに PATH 変数を使用します。 PATH が設定されていない場合は、現在のデータベースを検索し、それ以外の場合には、PATH で指定されたデータベースとスキーマを指定された順序で検索します。 Netezza Performance Serverは、後続のデータベースにより良い一致が存在する可能性があっても、最初に見つかった一致を使用します。 曖昧な呼び出しが行われた場合、引数の暗黙的なキャストが必要となることや、複数の一致の可能性によるエラーの原因となることがあります。 また、Performance Server システムは、ストアード・プロシージャー、ユーザー定義関数 (UDF)、ユーザー定義集約関数 (UDA) の検索のみに PATH セッション変数を使用します。 表、シーケンスなど、その他のオブジェクト・タイプはサポートされません。
ストアード・プロシージャーが別のデータベースから呼び出された場合、非修飾オブジェクトは、ストアード・プロシージャーが定義されているデータベースのオブジェクトではなく、呼び出し側 のデータベースのオブジェクトにバインドします。 Netezza Performance Serverは、まずPATH変数を使用してこれら3つのオブジェクトタイプを検索してから、呼び出したデータベース内を検索するためです。
別のデータベース内のデータにアクセスするストアード・プロシージャーのクロスデータベース呼び出しを実行する場合、必ず、そのストアード・プロシージャーでは、完全修飾オブジェクト名を使用してそれらのデータ・オブジェクトを参照してください。
書き込み操作は、データベースをまたがって行うことはできません。 挿入、更新、削除、作成、 切り捨て、変更、または除去のコマンドを含むプロシージャーの場合には、 必ず、ストアード・プロシージャーが定義されているデータベースに接続してください。