日付、時間、またはバイナリ データを含む SQL データの操作は、従来の COBOL ホスト変数を使用すると複雑になる場合があり、可変長の文字データを扱う従来の技術では問題が生じる可能性があります。このデータの操作を簡単にするために SQL TYPE 宣言が用意されています。この宣言では、リレーショナル データ ストアの固有のデータ型をより厳密に反映するホスト変数の指定が容易になります。これにより、より多くのアプリケーションを動的でなく静的 SQL 構文を使用してビルドできるようになり、また容易にコード実行を最適化できるようになります。
SQL TYPE をアプリケーションに直接コーディングするか、OpenESQL アプリケーションの場合は OpenESQL アシスタントの [Type COBOL Variable] オプションを [SQL TYPE] に設定して OpenESQL アシスタントを使用して SQL TYPE を自動的に使用します。
このプログラム例では、使用する日付、時刻、およびタイムスタンプのエスケープ シーケンスと、それらを SQL TYPE として再定義する方法を示します。この例は、OpenESQL および DB2 ECM の両方で使用できます。
working-storage section. EXEC SQL INCLUDE SQLCA END-EXEC 01 date-field1 pic x(29). 01 date-field2 pic x(29). 01 date-field3 pic x(29). procedure division. EXEC SQL CONNECT TO 'Net Express 4.0 Sample 1' USER 'admin' END-EXEC * If the Table is there drop it. EXEC SQL DROP TABLE DT END-EXEC * Create a table with columns for DATE, TIME, and DATE/TIME * NOTE: Access uses DATETIME column for all three. * Some databases will have dedicated column types. * If you are creating DATE/TIME columns on another data * source, refer to your database documentation to see how to * define the columns. EXEC SQL CREATE TABLE DT ( id INT, myDate DATE NULL, myTime TIME NULL, myTimestamp TIMESTAMP NULL) END-EXEC * INSERT into the table using the ODBC Escape sequences EXEC SQL INSERT into DT values (1 , {d '1961-10-08'}, *> Set just the date part {t '12:21:54' }, *> Set just the time part {ts '1966-01-24 08:21:56' } *> Set both parts ) END-EXEC * Retrieve the values we just inserted EXEC SQL SELECT myDate ,myTime ,myTimestamp INTO :date-field1 ,:date-field2 ,:date-field3 FROM DT where id = 1 END-EXEC * Display the results. display 'where the date part has been set :' date-field1 display 'where the time part has been set :' date-field2 display 'NOTE, most data sources will set a default ' 'for the date part ' display 'where both parts has been set :' date-field3 * Remove the table. EXEC SQL DROP TABLE DT END-EXEC * Disconnect from the data source EXEC SQL DISCONNECT CURRENT END-EXEC stop run.
また、SQL TYPE で定義するホスト変数を日付 / 時刻の変数に使用できます。次のホスト変数を定義します。
01 my-id pic s9(08) COMP-5. 01 my-date sql type is date. 01 my-time sql type is time. 01 my-timestamp sql type is timestamp.
さらに、INSERT 文を次のコードと置き換えます。
*> INSERT into the table using SQL TYPE HOST VARS move 1 to MY-ID move "1961-10-08" to MY-DATE move "12:21:54" to MY-TIME move "1966-01-24 08:21:56" to MY-TIMESTAMP EXEC SQL INSERT into DT value ( :MY-ID ,:MY-DATE ,:MY-TIME ,:MY-TIMESTAMP ) END-EXEC