Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - プログラミング » SQL Anywhere でのプログラミングの概要 » アプリケーションでの SQL の使用

 

結果セットの記述

アプリケーションによっては、アプリケーション内で完全に指定できない SQL 文を構築するものがあります。たとえば、ユーザが表示するカラムを選択できるレポート・アプリケーションのように、文がユーザからの応答に依存していて、ユーザの応答がないとアプリケーションは検索する情報を正確に把握できない場合があります。

そのような場合、アプリケーションは、「結果セット」の性質と結果セットの内容の両方についての情報を検索する方法を必要とします。結果セットの性質についての情報を「記述子」と呼びます。記述子を用いて、返されるカラムの数や型を含むデータ構造体を識別します。アプリケーションが結果セットの性質を認識していると、内容の検索が簡単に行えます。

この「結果セット・メタデータ」 (データの性質と内容に関する情報) は記述子を使用して操作します。結果セットのメタデータを取得し、管理することを「記述」と呼びます。

通常はカーソルが結果セットを生成するので、記述子とカーソルは密接にリンクしています。ただし、記述子の使用をユーザに見えないように隠しているインタフェースもあります。通常、記述子を必要とする文は SELECT 文か、結果セットを返すストアド・プロシージャのどちらかです。

カーソルベースの操作で記述子を使う手順は次のとおりです。

  1. 記述子を割り付けます。インタフェースによっては明示的割り付けが認められているものもありますが、ここでは暗黙的に行います。

  2. 文を準備します。

  3. 文を記述します。文がストアド・プロシージャの呼び出しかバッチであり、結果セットがプロシージャ定義において RESULT 句によって定義されていない場合、カーソルを開いてから記述を行います。

  4. 文 (Embedded SQL) に対してカーソルを宣言して開くか、文を実行します。

  5. 必要に応じて記述子を取得し、割り付けられた領域を修正します。多くの場合これは暗黙的に実行されます。

  6. 文の結果をフェッチし、処理します。

  7. 記述子の割り付けを解除します。

  8. カーソルを閉じます。

  9. 文を削除します。これはインタフェースによっては自動的に行われます。

実装の注意
  • Embedded SQL では、SQLDA (SQL Descriptor Area) 構造体に記述子の情報があります。SQLDA (SQL descriptor area)を参照してください。

  • ODBC では、SQLAllocHandle を使って割り付けられた記述子ハンドルで記述子のフィールドへアクセスできます。SQLSetDescRec、SQLSetDescField、SQLGetDescRec、SQLGetDescField を使ってこのフィールドを操作できます。

    または、SQLDescribeCol と SQLColAttributes を使ってカラムの情報を取得することもできます。

  • Open Client では、ct_dynamic を使って文を準備し、ct_describe を使って文の結果セットを記述します。ただし、ct_command を使って、SQL 文を最初に準備しないで送信し、ct_results を使って返されたローを 1 つずつ処理することもできます。これは Open Client アプリケーション開発を操作する場合に一般的な方法です。

  • JDBC では、java.sql.ResultSetMetaData クラスが結果セットについての情報を提供します。

  • INSERT 文などでは、記述子を使用してデータベース・サーバにデータを送信することもできます。ただし、これは結果セットの記述子とは種類が異なります。

    DESCRIBE 文の入力パラメータと出力パラメータの詳細については、DESCRIBE 文 [ESQL]を参照してください。