このドキュメントでは、次のトピックについて説明します。
SQL 構文(上記のセクションを参照)に加えて、フレキシブル SQL では任意の SQL 構文を使用できます。
<<
および >>
フレキシブル SQL は <<
および >>
文字で囲まれます。 任意の SQL テキストおよびホスト変数を指定できます。 フレキシブル SQL 内では、ホスト変数の先頭にコロン(:)を付ける必要があります。
フレキシブル SQL 文字列は複数のステートメント行にわたって指定することもできます。 コメントも指定できます(PROCESS SQL
ステートメントも参照)。
フレキシブル SQL は、次の SQL 構文項目と置き換えて使用できます。
フレキシブル SQL は、選択式の節間でも使用できます。
SELECT selection << ... >> INTO ... FROM ... << ... >> WHERE ... << ... >> GROUP BY ... << ... >> HAVING ... << ... >> ORDER BY ... << ... >>
注意:
フレキシブル SQL に使用される SQL テキストは Natural コンパイラには認識されません。 SQL テキスト(置き換えられたホスト変数とともに)は単に SQL 文字列にコピーされ、データベースシステムに渡されます。 フレキシブル
SQL の構文エラーは、データベースで対応するステートメントが実行されるときにランタイムに検出されます。
SELECT NAME FROM SQL-EMPLOYEES WHERE << MONTH (BIRTH) >> = << MONTH (CURRENT_DATE) >>
SELECT NAME FROM SQL-EMPLOYEES WHERE << MONTH (BIRTH) = MONTH (CURRENT_DATE) >>
SELECT NAME FROM SQL-EMPLOYEES WHERE SALARY > 50000 << INTERSECT SELECT NAME FROM SQL-EMPLOYEES WHERE DEPT = 'DEPT10' >>
フレキシブル SQL 内では、"テキスト変数" を指定することもできます。
<<:T :host-variable [LINDICATOR :host-variable]>>
|
構文の各項目については、以下で説明します。
:T: |
テキスト変数は接頭文字 SQL ステートメント内のテキスト変数は、ランタイムにその内容で置き換えられます。つまり、テキスト変数に含まれるテキスト文字列が SQL 文字列に挿入されるということです。 置き換えの後、挿入されたテキスト文字列から末尾の空白が削除されます。 テキスト変数の内容が構文的に正しい SQL 文字列であることをユーザー自身が確実にする必要があります。 特に、テキスト変数の内容に host-variables が含まれないようにする必要があります。 テキスト変数を含むステートメントは常にダイナミック SQL モードで実行されます。 |
---|---|
LINDICATOR |
LINDICATOR オプション:
テキスト変数の後にキーワード 長さインジケータ変数のフォーマット/長さは I2 にする必要があります。
全般的な情報については、host-variable を参照してください。 |
DEFINE DATA LOCAL 01 TEXTVAR (A200) 01 TABLES VIEW OF SYSIBM-SYSTABLES 02 NAME 02 CREATOR END-DEFINE * MOVE 'WHERE NAME > ''SYS'' AND CREATOR = ''SYSIBM''' TO TEXTVAR * SELECT * INTO VIEW TABLES FROM SYSIBM-SYSTABLES << :T:TEXTVAR >> DISPLAY TABLES END-SELECT * END
生成される SQL ステートメント(LISTSQL
システムコマンドで表示される)は次のようになります。
SELECT NAME, CREATOR FROM SYSIBM.SYSTABLES:T: FOR FETCH ONLY
実行される SQL ステートメントは次のようになります。
SELECT TABNAME, CREATOR FROM SYSIBM.SYSTABLES WHERE TABNAME > 'SYS' AND CREATOR = 'SYSIBM'