テーブルまたは一時テーブルがデータベースにない場合にコンパイル時に完全な 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