目的
SPLの入力ファイルを使用して、データベース内のSQLストアド プロシージャを定義(作成または置換)します。
構文
-
次のような場合に当てはまります。
- filename
- SQLストアド プロシージャを作成するためのソース テキストが格納されているファイルの名前(ワークステーション接続システムの場合)。または、DD名(メインフレーム接続システムの場合)。
ワークステーション接続システムの場合、ファイル名の中にカンマ、セミコロン、空白がある場合には、ファイル名全体を単一引用符か二重引用符で囲みます。
次の例では、myproc.splがファイル名です。
.COMPILE FILE 'myproc.spl'
さらに、ファイル名の後にテキストが続く場合には、ファイル名を引用符で囲む必要があります。例えば、次のようになります。
.COMPILE FILE 'myproc.spl' WITH NOSPL
- NOSPL
- SQLストアド プロシージャのソース テキストをTeradata Databaseサーバーに格納しないことを指定します。
- SPL
- SQLストアド プロシージャのソース テキストをTeradata Databaseサーバーに格納することを指定します。 コマンドの"With"部分に引数が指定されていない場合、BTEQはソース テキスト ストレージ オプションをSPLに設定します。
- WITH
- SPL格納オプションを指定するための必須の構文。
- xxx
- SPL文の読み取り元のファイルを定義したz/OS JCLのDD文の名前(メインフレーム接続システムの場合)。
使用上の注意
COMPILEコマンドは、SQL(内部)ストアド プロシージャにのみ使用します。 外部ストアド プロシージャとSQLストアド プロシージャの違いについては、ストアド プロシージャの作成と使用を参照してください。
SQLストアド プロシージャ内に指定されたデータベースにアクセスするためには、CREATE PROCEDURE権限が必要です。 SQLストアド プロシージャのソース テキスト内でREPLACE PROCEDURE文を使用して既存のSQLストアド プロシージャの置換または変更を行なうためには、特定のSQLストアド プロシージャのDROP権限か、そのSQLストアド プロシージャが格納されているデータベースのDROP PROCEDURE権限が必要です。
入力ファイルのSQLストアド プロシージャ定義は、キーワードCREATE PROCEDUREまたはREPLACE PROCEDUREから始まり、SQLストアド プロシージャ本体が続き、セミコロンで終わります。 定義には、パラメータ、ローカル変数、例外ハンドラーおよび注釈も含めることができます。
- このコマンドを実行する前に、Teradata Databaseへのログオンが必要です。
- SQLストアド プロシージャ用のソース テキストが入力ファイルに書き込まれていなければなりません。 BTEQプロンプトに対してCREATE PROCEDUREまたはREPLACE PROCEDURE SQL文を発行しないでください。
- 1つのファイルには、1つのSQLストアド プロシージャのソース テキストだけを含めることができます。 そのファイルには、他のBTEQコマンドを含めることはできません。
- COMPILEコマンドは、SQLストアド プロシージャ用のオープン トランザクションの最後のステートメントでなければなりません。
コンパイル エラーがない場合、SQLストアド プロシージャの全ソース テキストが指定のTeradata Databaseに格納されます。 そのテキストは、後でSHOW PROCEDURE SQL文を使用して検索できます。
SPLの特徴と制約事項の詳細およびサンプル入力ファイルについては、<SQLデータ操作言語、B035-1146>を参照してください。
SPL属性
Teradata DatabaseサーバーにSQLストアド プロシージャのソース テキストを格納するかどうかを指定するためには、以下の属性を使用します。
Teradata DatabaseにSQLストアド プロシージャのソース テキストを格納する場合は、SPLを選択します。 これは、デフォルトのオプションです。
NOSPLは、SQLストアド プロシージャのソース テキストをTeradata Databaseに格納しないことを指定します。 このようなSQLストアド プロシージャに対しては、SHOW PROCEDURE SQL文によってエラーまたは失敗が戻されます。
セッション モード
セッション モード(TeradataまたはANSI)は、Teradata Database内に作成された各SQLストアド プロシージャと共に格納されます。 この情報は、SQLストアド プロシージャの実行時に使用されます。
特定のモードで作成されたSQLストアド プロシージャは、同じモードでのみ実行が可能です。 例えば、ANSIモードで作成されたSQLストアド プロシージャは、ANSIモードでのみ実行できます。
この規則では、特定のセッション モードに固有のトランザクション制御ステートメントを使用してSQLストアド プロシージャの定義を含めることができます。また、セッション モードに関連したデフォルト値を定義することができます。
COMPILEリクエストを繰り返すための=コマンドの使用
COMPILEコマンド リクエストを1回繰り返すためには、=コマンドを使用します。 =コマンドによって時間が節約され、この機能を開始するために必要なキーストロークが少なくなります。
ソース テキスト内で修飾されないオブジェクト
SQLストアド プロシージャのソース テキスト内のSQL文で参照されているデータベース オブジェクトがデータベース名によって修飾されていない場合、そのオブジェクトは、SQLストアド プロシージャを作成したセッションの現在のデフォルトのデータベース内にあると想定されます。
非修飾オブジェクトは、SQLストアド プロシージャのデータベース オブジェクトの作成前に修飾されます。
COMPILEコマンドのエラー
COMPILEコマンドの結果として、Teradata DatabaseからSUCCESS、OK、またはFAILUREの応答が返されます。
(ANSIまたはTeradataモードで)COMPILEコマンドへの応答として失敗が報告された場合には、トランザクション全体がロールバックされます。
コンパイル エラー
SPLコンパイル エラーおよび警告は、SUCCESSまたはOK応答の一部として報告されます。 これらのエラーや警告がオープン トランザクションに影響を与えることはありません。
コンパイル エラーがある場合には、SQLストアド プロシージャは作成も置換もされません。
コンパイル警告だけが発生している場合には、SQLストアド プロシージャはリクエストに応じて作成または置換されます。
エラー応答のサイズと構成の詳細については、エラー処理を参照してください。
SPLコンパイル エラー メッセージと警告メッセージの全リストは、マニュアル<メッセージ、B035-1096>を参照してください。
コンパイルのアボート
ABORT機能を使用してリクエストをアボートする場合は、以下の規則が適用されます。
- CREATE PROCEDUREの場合、SQLストアド プロシージャはデータベース内に定義されません。
- REPLACE PROCEDUREの場合、元のSQLストアド プロシージャの定義が保存されます。
プラットフォーム間の互換性
実行可能なSQLストアド プロシージャは、Teradata Databaseサーバー上に作成されます。 実行可能なコードは、サーバーの操作環境とだけ互換性があります。 したがって、SolarisなどのTeradata Databaseプラットフォーム上で作成されてSolarisから復元されたSQLストアド プロシージャは、Microsoft Windowsなどの別のTeradata Databaseサーバー プラットフォームで実行したりMicrosoft Windowsに格納したりすることができません。
例1 – COMPILE
次の例では、COMPILEコマンドの正しい使用法を示します。
.SET SESSION TRANS BTET .LOGON server/user, password BT; SELECT date; .COMPILE FILE spSample1 ET;
例2 – COMPILE
次の例では、トランザクションをクローズするためにCOMPILEコマンドの後にCOMMIT/ROLLBACK/ABORTを指定する必要があります。
SET SESSION TRANS ANSI; LOGON server/user, password; SELECT date; .COMPILE FILE spSample1; COMMIT;
例3 – COMPILE
次の使用例は、有効ではありません。COMPILEコマンドがオープン トランザクションの最後のリクエストになっていないためです(SELECT SQL文が続いています)。
SET SESSION TRANS BTET; LOGON server/user, password; BT; COMPILE FILE spSample1; SELECT date; ET;