PUT_ROUTINE_SAR プロシージャー

PUT_ROUTINE_SAR プロシージャーは、サーバーで SQL ルーチンを作成するために必要なファイルを渡し、ルーチンを定義します。

重要: PUT_ROUTINE_SAR プロシージャーは推奨されません。CREATE PROCEDURE を使用して、プロシージャーを別のデータベースにコピーしてください。

許可

このプロシージャーを実行するには、以下のいずれかの権限が必要です。
  • プロシージャーでの EXECUTE 特権
  • DATAACCESS 権限
  • DBADM 権限
  • SQLADM 権限

デフォルトの PUBLIC 特権

制限のないデータベースでは、このプロシージャーが自動的に作成されると、EXECUTE 特権が PUBLIC に付与されます。

構文図を読む構文図をスキップする PUT_ROUTINE_SAR ( sarblob ,new-owner,use-register-flag )

スキーマは SYSFUN です。

プロシージャー・パラメーター

sarblob
ルーチン SAR ファイル・コンテンツを含む、タイプ BLOB(3M) の入力引数。
new-owner
ルーチンの許可検査に使用される許可名を含む、タイプ VARCHAR(128) の入力引数。 new-owner は、定義されるルーチンに必要な権限を持っていなければなりません。 new-owner が指定されない場合、 オリジナル・ルーチン定義者の許可名が使用されます。
use-register-flag
CURRENT SCHEMA および CURRENT PATH 特殊レジスターがルーチンの定義に使用されるかどうかを指示する、 タイプ INTEGER の入力引数。 特殊レジスターが使用されない場合、 ルーチンがはじめに定義されるときはデフォルト・スキーマと SQL パスの設定が使用されます。 use-register-flag に考えられる値は以下のとおりです。
0
現行環境の特殊レジスターを使用しません。
1
CURRENT SCHEMA および CURRENT PATH 特殊レジスターを使用します。
値が 1 の場合、ルーチン定義 (ルーチンの名前を含む) の非修飾オブジェクト名に CURRENT SCHEMA が使用され、ルーチン定義の非修飾ルーチンとデータ・タイプを解決するために CURRENT PATH が使用されます。 use-registers-flag が指定されない場合、振る舞いは 0 が指定されたときと同じです。

sarblob に含まれる識別情報がチェックされ、入力が環境に対して適切であるかどうかが確認されます。 入力が適切でない場合は、エラーが起こります (SQLSTATE 55046)。 PUT_ROUTINE_SAR プロシージャーは次に、sarblob の内容を使用してサーバーでルーチンを定義します。

sarblob 引数の内容は SQL アーカイブ・ファイルを構成する個々のファイルへ抽出されます。 共有ライブラリーとバインド・ファイルは、一時ディレクトリーのファイルに書き込まれます。環境は、コンパイルおよびリンクが不要であること、 共有ライブラリーとバインド・ファイルのロケーションが使用可能であることを、 ルーチン定義ステートメント処理に認識させるように設定されます。 DDL ファイルの内容が、ルーチン定義ステートメントを動的に実行するために使用されます。

指定のスキーマの下で、複数のプロシージャーが並行してインストールされることはありません。

このステートメントの処理は、他のインターフェースを使用してルーチン定義ステートメントを実行するのと同じエラーを起こす可能性があります。 ルーチン定義処理中に、共有ライブラリーとバインド・ファイルの存在が通知され、 プリコンパイル、コンパイル、およびリンクのステップがスキップされます。 バインド・ファイルはバインド処理中に使用され、 両方のファイルの内容が SQL ルーチンの通常ディレクトリーにコピーされます。

GET ROUTINE または PUT ROUTINE 操作 (またはそれに対応するプロシージャー) が正常に実行できない場合、 エラー (SQLSTATE 38000)、および失敗の原因に関する情報を示す診断テキストを毎回戻します。 例えば、GET ROUTINE に指定されたプロシージャー名が SQL プロシージャーを識別しない場合、"-204, 42704" という診断テキストが戻ります。ここで、"-204" は SQLCODE、"42704" は SQLSTATE で、それぞれ問題の原因を示します。 この例の SQLCODE と SQLSTATE は、 GET ROUTINE コマンドで指定されたプロシージャー名が未定義であることを示します。