CLI の手引きおよび解説書

システム・カタログ情報の照会

アプリケーションが頻繁に行う最初のタスクの 1 つに表のリストの表示があり、このリストから処理を行う表を 1 つまたは複数選択します。アプリケーションからデータベース・システム・カタログに対して独自の照会を発行して、このタイプのカタログ情報を入手することもできますが、最善の方法はその代わりにアプリケーションから DB2 CLI カタログ関数を呼び出すことです。このようなカタログ関数を使用すると、総称インターフェースが得られ、 DB2 ファミリーのサーバー全体に照会を発行し、一貫性のある結果セットを返すことができます。そうすれば、アプリケーションはサーバーに固有のものではなくなり、カタログ照会もリリース固有のものではなくなります。

カタログ関数を使用すると、ステートメント・ハンドルによってアプリケーションに結果セットが返されます。この関数を呼び出すことは、 SQLExecDirect() を使用してシステム・カタログ表に対して 1 つの選択を実行するのと概念的に同じです。この関数呼び出しの後で、アプリケーションは結果セットから個々の行を取り出すことができ、通常どおり SQLFetch() によって列データを処理します。 DB2 CLI カタログ関数は、次のとおりです。

この関数によって返される結果セットは、各カタログ関数の説明の部分で定義されています。列は、指定された順序で定義されます。今後のリリースでは、それぞれの結果セットの定義の末尾に他の列が追加される可能性があります。したがって、そのような変更の影響を受けないような方法で、アプリケーションを作成する必要があります。

カタログ関数の中には、非常に複雑な照会を実行する結果となるものがあるので、そのような関数は必要なときにのみ呼び出すようにしてください。返された情報をアプリケーションが保管するようにし、同じ情報を入手するために繰り返し呼び出しを行うことがないようにすることをお勧めします。

カタログ関数での入力引き数

すべてのカタログ関数には、入力引き数リストに CatalogName および SchemaName (およびそれらに関連した長さ) があります。その他の入力引き数には、TableNameProcedureName、または ColumnName (およびそれらに関連した長さ) があります。これらの入力引き数を使用して、返される情報の量を識別または制約します。ただし、 CatalogName は常にヌル・ポインター (長さは 0 に設定) でなければなりません。 DB2 CLI では現時点では 3 部分名がサポートされていないからです。

第 5 章, DB2 CLI 関数のカタログ関数の「関数の引き数」の項で、上記の入力引き数をそれぞれパターン値または普通の引き数のいずれかとして説明します。たとえば、SQLColumnPrivileges() は、 SchemaName および TableName を普通の引き数として扱い、 ColumnName をパターン値として扱います。

普通の引き数として扱われる入力はリテラルで、大文字小文字の区別が有効です。引き数は、照会を修飾はしませんが、ご希望の情報を識別します。この引き数にアプリケーションがヌル・ポインターを渡すとエラーになります。

パターン値として扱われる入力は、一致している行のみを含めることによって結果セットのサイズを制約するのに使用します。これは、基本照会を WHERE 文節で修飾した場合と同じです。パターン値入力についてアプリケーションがヌル・ポインターを渡すと、引き数は結果セットの制限に使用されません (つまり、WHERE 文節がない)。カタログ関数に複数のパターン値入力引き数があると、基本照会内の複数の WHERE 文節が AND で結合された場合と同じように扱われます。この結果セットでは、WHERE 文節のすべての条件を満たした場合に限り行が現れます。

各パターン値引き数には、次の文字が含まれています。

これらの引き数値は、WHERE 文節内の概念 LIKE 述部で使用されます。メタデータ文字 (_、%) をそのまま扱うには、エスケープ文字を _ または % の直前に入れなければなりません。エスケープ文字自体をパターンの一部として指定するためには、それを連続して 2 回入れます。アプリケーションは、 SQL_SEARCH_PATTERN_ESCAPE を指定した SQLGetInfo() を呼び出すと、エスケープ文字を判別することができます。

カタログ関数の例

browser.c サンプル・アプリケーションでは、

browser.c サンプルの出力を下に示します。このサンプルに関連するセグメントは、カタログ関数ごとにリストされます。

Enter Search Pattern for Table Schema Name:
STUDENT
Enter Search Pattern for Table Name:
%
### TABLE SCHEMA              TABLE_NAME                TABLE_TYPE
    ------------------------- ------------------------- ----------
1   STUDENT                   CUSTOMER                  TABLE
2   STUDENT                   DEPARTMENT                TABLE
3   STUDENT                   EMP_ACT                   TABLE
4   STUDENT                   EMP_PHOTO                 TABLE
5   STUDENT                   EMP_RESUME                TABLE
6   STUDENT                   EMPLOYEE                  TABLE
7   STUDENT                   NAMEID                    TABLE
8   STUDENT                   ORD_CUST                  TABLE
9   STUDENT                   ORD_LINE                  TABLE
10  STUDENT                   ORG                       TABLE
11  STUDENT                   PROD_PARTS                TABLE
12  STUDENT                   PRODUCT                   TABLE
13  STUDENT                   PROJECT                   TABLE
14  STUDENT                   STAFF                     TABLE
Enter a table Number and an action:(n [Q | C | P | I | F | T |O | L])
|Q=Quit     C=cols     P=Primary Key I=Index   F=Foreign Key |
|T=Tab Priv O=Col Priv S=Stats       L=List Tables           |
1c
Schema: STUDENT  Table Name: CUSTOMER
   CUST_NUM, NOT NULLABLE, INTeger (10)
   FIRST_NAME, NOT NULLABLE, CHARacter (30)
   LAST_NAME, NOT NULLABLE, CHARacter (30)
   STREET, NULLABLE, CHARacter (128)
   CITY, NULLABLE, CHARacter (30)
   PROV_STATE, NULLABLE, CHARacter (30)
   PZ_CODE, NULLABLE, CHARacter (9)
   COUNTRY, NULLABLE, CHARacter (30)
   PHONE_NUM, NULLABLE, CHARacter (20)
>> Hit Enter to Continue<<
1p
Primary Keys for STUDENT.CUSTOMER
 1  Column: CUST_NUM            Primary Key Name: = NULL
>> Hit Enter to Continue<<
1f
Primary Key and Foreign Keys for STUDENT.CUSTOMER
  CUST_NUM  STUDENT.ORD_CUST.CUST_NUM
      Update Rule SET NULL , Delete Rule: NO ACTION
>> Hit Enter to Continue<<


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