CLI の手引きおよび解説書

ベンダー・エスケープ文節の使用

X/Open SQL CAE 仕様では、エスケープ文節を、『ベンダー固有の SQL 拡張機能を、標準化された SQL の枠組みの中で実装するための構文上の機構』として定義しています。 DB2 CLI と ODBC の両方とも、X/Open で定義されているベンダー・エスケープ文節をサポートしています。

現在では、エスケープ文節は、SQL 拡張を定義するために ODBC によって広く使用されています。 DB2 CLI は、ODBC 拡張を正しい DB2 構文に変換します。 SQLNativeSql() 関数を使用して、その結果の構文を表示することができます。

アプリケーションが DB2 データ・ソースだけにアクセスする場合は、エスケープ文節を使用する必要はありません。アプリケーションが同じサポートを備えている他のデータ・ソースにアクセスしようとする際に、別の構文を使用していれば、エスケープ文節を使うとアプリケーションの可搬性が高くなります。

DB2 CLI は、エスケープ文節に標準構文と短縮構文の両方を使用してきましたが、標準構文は (DB2 CLI はサポートはしていますが) 使用すべきでないものとされています。標準構文を使用したエスケープ文節は、次の形式を取っていました。

      --(*vendor(vendor-identifier),
            product(product-identifier) extended SQL text*)--

アプリケーションでは、現在では短縮構文 (以下に説明しています) だけを使用してください。最新の ODBC 標準に付いていくためです。

エスケープ文節の構文

エスケープ文節の定義の形式は次のとおりです。

   { extended SQL text }

これによって、以下の SQL 拡張子を定義します。

ODBC 日付、時刻、タイム・スタンプのデータ

日付、時刻、およびタイム・スタンプのデータの ODBC エスケープ文節は、次のとおりです。

    {d 'value'}
    {t 'value'}
    {ts 'value'}

d は、 valueyyyy-mm-dd 形式の日付であることを示します。
t は、 valuehh:mm:ss 形式の時刻であることを示します。
ts は、 valueyyyy-mm-dd hh:mm:ss[.f...] 形式のタイム・スタンプであることを示します。

たとえば、次のステートメントを使用して、 EMPLOYEE 表に対する照会を発行することができます。

    SELECT * FROM EMPLOYEE WHERE HIREDATE={d '1994-03-29'}

DB2 CLI は、上記ステートメントを DB2 形式に変換します。 SQLNativeSql() を使用して、変換されたステートメントを返すことができます。

日付、時刻、およびタイム・スタンプのリテラルの ODBC エスケープ文節は、 C データ・タイプの SQL_C_CHAR を指定した入力パラメーターで使用することができます。

ODBC 外部結合構文

外部結合の ODBC エスケープ文節は、次のとおりです。

    {oj outer-join}

outer join は次のとおりです。

      table-name  {LEFT | RIGHT | FULL} OUTER JOIN
                  {table-name | outer-join}
                  ON search-condition

たとえば、DB2 CLI が次のステートメントを変換する場合を考慮します。

    SELECT * FROM {oj T1 LEFT OUTER JOIN T2 ON T1.C1=T2.C3}
        WHERE T1.C2>20

これは IBM の形式に変換され、その形式は SQL92 外部結合構文に対応します。

    SELECT * FROM T1 LEFT OUTER JOIN T2 ON T1.C1=T2.C3 WHERE T1.C2>20
注:すべての DB2 サーバーで外部結合がサポートされているわけではありません。現行サーバーが外部結合をサポートしているかどうかを判別するには、 SQL_SQL92_RELATIONAL_JOIN_OPERATORS および SQL_OJ_CAPABILITIES オプションを指定して、SQLGetInfo() を呼び出します。

LIKE 述部エスケープ文節

SQL LIKE 述部では、メタキャラクター % がゼロ個以上の任意の文字に相当し、メタキャラクター _ が任意の 1 文字に相当します。 ESCAPE 文節を利用すると、実際のパーセント文字および下線文字を含む値に相当するようにパターンの定義を行うことができ、この場合はその文字の前にエスケープ文字を入れます。 LIKE 述部のエスケープ文字を定義するのに ODBC が使用するエスケープ文節は、次のとおりです。

{escape 'escape-character'}

escape-character は、エスケープ文節の使用の基準となる DB2 規則でサポートされている任意の文字です。

さまざまなベンダー DBMS 製品間の可搬性には関係のないアプリケーションの場合、 ESCAPE 文節を直接そのデータ・ソースへ渡す必要があります。特定の DB2 データ・ソースで LIKE 述部エスケープ文字がサポートされる時点を判別するには、アプリケーションで SQL_LIKE_ESCAPE_CLAUSE 情報タイプを指定して SQLGetInfo() を呼び出してください。

ストアード・プロシージャー呼び出し構文

ストアード・プロシージャーを呼び出す場合の ODBC エスケープ文節は、次のとおりです。

 {[?=]call procedure-name[([parameter][,[parameter]]...)]}
 

プロシージャーにはゼロ個以上のパラメーターがあります。 (角大括弧 ([ ]) は、オプションの引き数を表します。)

ODBC は、任意指定パラメーター ?= がプロシージャーの戻り値を表すように指定します。戻り値があれば、SQLBindParameter() によって定義される最初のパラメーター・マーカーによって指定された場所に保管されます。 ?= がエスケープ文節にあると、 DB2 CLI は SQLCODE をプロシージャーの戻り値として戻します。 ?= がない場合、アプリケーションは SQLGetSQLCA() 関数を使用して SQLCA を検索することができます。 ODBC とは異なり、DB2 CLI はプロシージャー引き数としてリテラルをサポートしてはいないため、パラメーター・マーカーを使用します。

ストアード・プロシージャーに関する詳細については、 ストアード・プロシージャーの使用またはアプリケーション開発の手引き を参照してください。

たとえば、DB2 CLI が次のステートメントを変換する場合を考慮します。

    {CALL NETB94(?,?,?)}

これは、次の内部 CALL ステートメント形式に変換されます。

    CALL NEBT94(?, ?, ?)

ODBC スカラー関数

ストリングの長さ、サブストリング、またはトリムなどのスカラー関数を、結果セットの列や、結果セットの行を制限する列で使用することができます。スカラー関数の ODBC エスケープ文節は次のとおりです。

    {fn scalar-function}

ここで、 scalar-function付録 D, 拡張スカラー関数にリストされている関数です。

たとえば、DB2 CLI が次のステートメントを変換する場合を考慮します。

    SELECT {fn CONCAT(FIRSTNAME,LASTNAME)} FROM EMPLOYEE

これを次のように変換します。

    SELECT FIRSTNAME CONCAT LASTNAME FROM EMPLOYEE

SQLNativeSql() を呼び出して、変換された SQL ステートメントを得ることができます。

どのスカラー関数が、特定の接続ハンドルで参照される現行サーバーによってサポートされているかを判別するには、 SQLGetInfo() を、 SQL_NUMERIC_FUNCTIONS、SQL_STRING_FUNCTIONS、 SQL_SYSTEM_FUNCTIONS、および SQL_TIMEDATE_FUNCTIONS オプションを指定して呼び出してください。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]