SQL(CHECK) の SQL 文プレフィックス

テーブルまたは一時テーブルがデータベースにない場合にコンパイル時に完全な SQL 構文チェックが可能となるように、OpenESQL には、コンパイル時に、また必要に応じて実行時にも、特定の SQL 文を実際に実行できるようにする SQL 文プレフィックスが用意されています。

文プレフィックスは、EXEC SQL 文に直接コーディングされ、SQL(CHECK) を使用してコンパイルされた場合にのみ実行されます。

構文:

EXEC SQL [statementPrefix] [errorFlag[...]] SQLStatement END-EXEC

パラメーター:

statementPrefix
[ALSO CHECK]
コンパイル時および実行時に次の SQLStatement を実行するように SQL(CHECK) に指示する文プレフィックス。
[ONLY CHECK]
コンパイル時にのみ次の SQLStatement を実行するように SQL(CHECK) に指示する文プレフィックス。
[NOCHECK]
関連する SQLStatement のみについて SQL(CHECK) 指令の影響を無効にする文プレフィックス。
errorFlag
[IGNORE ERROR]
SQLStatement の実行時に成功またはエラーの戻りコードを提供するデフォルトの動作をオーバーライドし、コンパイル時にすべてのエラーを無視してコンパイルを続行します。
[WITH WARNING]
SQLStatement の実行時に成功またはエラーの戻りコードを提供するデフォルトの動作をオーバーライドし、コンパイル時にすべてのエラーを警告として返してコンパイルを続行します。
SQLStatement
次に合致する SQL 文。
  • CREATE TABLE などの DDL 文または INSERT、DELETE、UPDATE などの特定の DML 文
  • ホスト変数を使用していない
  • DBMS ベンダーが理解できる構文で記述されている

例:

例 1
コンパイル時にのみ SQL Server 一時テーブルを作成し、このテーブルを参照する後続の SQL がコンパイル時に OpenESQL SQL(CHECK) 指令によって完全に構文チェックされるようにします。
EXEC SQL [ONLY CHECK] 
create table #temp(col1 int,col2 char(32))
END-EXEC 
例 2
コンパイル時および実行時に SQL Server 一時テーブルを作成し、完全なコンパイル時の構文チェックに加えて、実行時にテーブルが実際に作成されるようにします。
EXEC SQL [ALSO CHECK] 
create table #temp(col1 int,col2 char(32))
END-EXEC
例 3
コンパイル時にテーブルが存在するかどうかにかかわらず、Oracle でのコンパイル時にテスト データを作成します。
EXEC SQL [ONLY CHECK IGNORE ERROR] 
Drop table TT
END-EXEC 

EXEC SQL [ONLY CHECK] 
create table TT (col1 int) 
END-EXEC
 
EXEC SQL [ONLY CHECK] 
Insert into table TT values (1) 
END-EXEC