プライマリ・コンテンツに移動
Oracle® C++ Call Interfaceプログラマーズ・ガイド
12c リリース1 (12.1)
B72464-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

6 メタデータ

この章では、結果セットまたはデータベースに関するメタデータの取出し方法を説明します。

ここでは、次の項目について説明します。

メタデータの概要

データベース・オブジェクトには、内容を説明する様々な属性があります。DESCRIBE操作を行うと特定のスキーマ・オブジェクトに関する情報を獲得できます。その結果には、Metadataクラスの各種のメソッドに対して引数としてオブジェクト属性を渡すことで、Metadataクラスのオブジェクトとしてアクセスできます。

DESCRIBE操作を明示的に実行できる対象は、データベース全体、ResultSetクラスに含まれている列の型とプロパティ、または、スキーマ・オブジェクトとサブスキーマ・オブジェクト、たとえば、表、型、順序、ビュー、型属性、列、プロシージャ、型メソッド、引数、関数、コレクション、結果、パッケージ、シノニム、およびリストなどです。

検索する属性の型を指定する必要があります。MetaDataクラスのgetAttributeCount()getAttributeId()およびgetAttributeType()の各メソッドを使用すると、使用可能な各属性をスキャンできます。

すべてのDESCRIBE情報は、その情報に対する最後の参照が削除されるまでキャッシュされます。この方法によって、開放されているDESCRIBE情報に、ユーザーが間違えてアクセスすることがなくなります。

明示的な記述の場合にはConnectionクラスのgetMetaData()メソッドをコールすることでメタデータを取得し、結果セット列のメタデータを取得するにはResultSetクラスのgetColumnListMetaData()メソッドをコールします。どちらのメソッドも説明情報とともにMetaDataオブジェクトを返します。MetaDataクラスは、この情報にアクセスするためのgetxxx()メソッドを提供します。

DESCRIBE操作の実行時には、次の問題に注意してください。

  • ATTR_TYPECODEでは、CREATE TYPE文で型を新規作成したときに指定した型を表す型コードが戻されます。これらの型コードは、TypeCode列挙型で、OCCI_TYPECODE定数によって表されます。内部PL/SQL型(ブール、索引付きの表)はサポートされていません。

  • ATTR_DATA_TYPEでは、データベース列のデータ型を表す型が戻されます。これらの値は、Type列挙型です。たとえば、LONG型では、OCCI_SQLT_LNG型が戻されます。

ID列のメタデータ

Oracle Database Release 12c以降、列はID列として作成できます。新しい行を表に挿入すると、これらの列の値が自動的に生成されます。

この機能により、新しいColumnAttrId enumMetaDataクラス(表13-27を参照)に追加され、オーバーロードされた形式のgetBoolean()メソッドがMetaDataクラスに追加されました。例6-1に、この機能の使用方法を示しています。

例6-1 ID列のメタデータの使用方法

vector<MetaData> v1;
MetaData metaData = conn->getMetaData(tableName);
columnCount = metaData.getInt(MetaData::ATTR_NUM_COLS);
cout << "Number of Columns : " << columnCount << endl;

v1 =  metaData.getVector(MetaData::ATTR_LIST_COLUMNS);

for(int i=0; i < v1.size(); i++) {
   MetaData md = v1[i];
   colNames[i] = md.getString(MetaData::ATTR_NAME);
   size[i] =  md.getInt(MetaData::ATTR_DATA_SIZE);
   precision[i] = md.getInt(MetaData::ATTR_PRECISION);
   scale[i] =  md.getInt(MetaData::ATTR_SCALE);

   if ( md.getBoolean(MetaData::ATTR_IS_NULL) )
      strcpy (isnull[i], "YES");
   else
      strcpy (isnull[i], "NO");

   if (md.getBoolean(MetaData::ATTR_COL_IS_IDENTITY))
      strcpy (isIdentity[i], "YES");
   else
      strcpy (isIdentity[i], "NO");

   if ( md.getBoolean(MetaData::ATTR_COL_IS_GEN_ALWAYS))
      strcpy (isGenAlways[i], "YES");
   else
      strcpy (isGenAlways[i], "NO");

   if (md.getBoolean(MetaData::ATTR_COL_IS_GEN_BY_DEF_ON_NULL))
      strcpy (isGenOnNull[i], "YES");
   else
      strcpy (isGenOnNull[i], "NO");
}

cout << "\n columnName  isNull   isIdentity   isGenAlways"  << "  isGenOnNull " 
   << endl;
cout <<"---------------------------------------------------------" << endl;

for(int i=0; i < columnCount; ++i) {
   cout << "   " << colNames[i] << "  ";
   printf("%10s%10s%12s%12s\n", isnull[i], isIdentity[i], isGenAlways[i],
      isGenOnNull[i]);
}

詳細は、『Oracle Database移行ガイド』および『Oracle Database SQL言語リファレンス』を参照してください。また、『Oracle Databaseリファレンス』の次の変更内容も参照してください。

  • ビューALL_TAB_COLUMNSDBA_TAB_COLUMNS, USER_TAB_COLUMNSALL_TAB_COLS, DBA_TAB_COLSおよびUSER_TAB_COLSの新しいIDENTITY_COLUMN

  • ビューALL_TABLESDBA_TABLESおよびUSER_TABLESの新しいHAS_IDENTITY

  • 表のID列プロパティを表示する、新しいビューALL_TAB_IDENTITY_COLSDBA_TAB_IDENTITY_COLSおよびUSER_TAB_IDENTITY_COLS

データベース・メタデータの記述

データベース・メタデータの記述は、明示的なDESCRIBE操作と同じになります。記述対象のオブジェクトは、スキーマ内のオブジェクトである必要があります。型の記述では、getMetaData()メソッドを接続からコールし、オブジェクトの名前またはRefAnyオブジェクトを渡します。最初にOBJECTモードで環境を初期化する必要があります。getMetaData()メソッドでは、MetaData型のオブジェクトが戻されます。MetaData型の各オブジェクトには、記述ツリーの一部である属性のリストがあります。この記述ツリーを再帰的に横断して参照できるサブツリーで、詳細な情報を表示できます。オブジェクトに関する詳細情報は、getxxx()メソッドをコールして取得できます。

データベースとそのオブジェクトを再帰的に記述するブラウザの構築が必要な場合は、(データベースも含めて)そのデータベースにある各オブジェクトの属性数、属性IDのリストおよび属性型のリストに関する情報にアクセスできます。この情報を使用すると、記述ツリーを最上位ノード(データベース)から表の列、型の属性、プロシージャやファンクションのパラメータに至るまで、再帰的にたどることができます。

たとえば、表とその内容を記述するという典型的なケースを想定します。getMetaData()メソッドを接続からコールし、記述する表の名前を渡します。戻されたMetaDataオブジェクトには、表に関する情報が含まれています。記述するオブジェクト(表、列、型、コレクション、ファンクション、プロシージャなど)の型はわかっているため、属性リストを取得できます。対応するgetxxx()メソッドをコールすると、表に指定されている型の変数内に値を取り出すことができます。

表6-1 属性のグループ化

属性の型 説明

パラメータ属性

すべての要素に属する属性

表およびビューの属性


およびビューに属する属性

プロシージャ、ファンクションおよびサブプログラムの属性


プロシージャ、ファンクションおよびパッケージ・サブプログラムに属する属性

パッケージ属性


パッケージに属する属性

型属性


に属する属性

型属性の属性


型属性に属する属性

型メソッド属性


メソッドに属する属性

コレクション属性


コレクション型に属する属性

シノニム属性


シノニムに属する属性

順序属性


順序に属する属性

列属性


またはビューの列に属する属性

引数属性および結果属性


引数または結果に属する属性

リスト属性


リスト・タイプを指定する属性

スキーマ属性


スキーマに固有の属性

データベース属性


データベースに固有の属性


メタデータのコード例

この項では、メタデータを使用するためのコード例を示します。

例6-2 単純なデータベース表の属性に関するメタデータの取得方法

この例は、単純なデータベース表の属性に関するメタデータの取得方法を示しています。

/* Create an environment and a connection to the HR database */
.
.
/* Call the getMetaData method on the Connection object obtainedv*/
MetaData emptab_metaData = connection->getMetaData(
      "EMPLOYEES", MetaData::PTYPE_TABLE);
/* Now that you have the metadata information on the EMPLOYEES table,
   call the getxxx methods using the appropriate attributes */

/* Call getString */
cout<<"Schema:"<<
              (emptab_metaData.getString(MetaData::ATTR_OBJ_SCHEMA))<<endl;

if(emptab_metaData.getInt(
              emptab_metaData::ATTR_PTYPE)==MetaData::PTYPE_TABLE)
   cout<<"EMPLOYEES is a table"<<endl;
else
    cout<<"EMPLOYEES is not a table"<<endl;

/* Call getInt to get the number of columns in the table */
int columnCount=emptab_metaData.getInt(MetaData::ATTR_NUM_COLS);
cout<<"Number of Columns:"<<columnCount<<endl;

/* Call getTimestamp to get the timestamp of the table object */
Timestamp tstamp = emptab_metaData.getTimestamp(MetaData::ATTR_TIMESTAMP);
/* Now that you have the value of the attribute as a Timestamp object,
   you can call methods to obtain the components of the timestamp */
int year;
unsigned int month, day;
tstamp.getData(year, month, day);

/* Call getVector for attributes of list type, such as ATTR_LIST_COLUMNS */
vector<MetaData>listOfColumns;
listOfColumns=emptab_metaData.getVector(MetaData::ATTR_LIST_COLUMNS);

/* Each of the list elements represents a column metadata,
   so now you can access the column attributes*/
for (int i=0;i<listOfColumns.size();i++
{
   MetaData columnObj=listOfColumns[i];
   cout<<"Column Name:"<<(columnObj.getString(MetaData::ATTR_NAME))<<endl;
   cout<<"Data Type:"<<(columnObj.getInt(MetaData::ATTR_DATA_TYPE))<<endl;
   .
   .
   /* and so on to obtain metadata on other column specific attributes */
}

例6-3 ユーザー定義型を含む列からのメタデータの取得方法

この例は、データベース表のユーザー定義型を含む列からのメタデータの取得方法を示しています。

/* Create an environment and a connection to the HR database */
...
/* Call the getMetaData method on the Connection object obtained */
MetaData custtab_metaData = connection->getMetaData(
      "CUSTOMERS", MetaData::PTYPE_TABLE);

/* Have metadata information on CUSTOMERS table; call the getxxx methods */
/* Call getString */
cout<<"Schema:"<<(custtab_metaData.getString(MetaData::ATTR_OBJ_SCHEMA))
     <<endl;
if(custtab_metaData.getInt(custtab_metaData::ATTR_PTYPE)==MetaData::PTYPE_TABLE)
   cout<<"CUSTOMERS is a table"<<endl;
else
   cout<<"CUSTOMERS is not a table"<<endl;

/* Call getVector to obtain list of columns in the CUSTOMERS table */
vector<MetaData>listOfColumns;
listOfColumns=custtab_metaData.getVector(MetaData::ATTR_LIST_COLUMNS);

/* Assuming metadata for column cust_address_typ is fourth element in list*/
MetaData customer_address=listOfColumns[3];

/* Obtain the metadata for the customer_address attribute */
int typcode = customer_address.getInt(MetaData::ATTR_TYPECODE);
if(typcode==OCCI_TYPECODE_OBJECT)
   cout<<"customer_address is an object type"<<endl;
else
   cout<<"customer_address is not an object type"<<endl;

string objectName=customer_address.getString(MetaData::ATTR_OBJ_NAME);

/* Now that you have the name of the address object,
   the metadata of the attributes of the type can be obtained by using
   getMetaData on the connection by passing the object name
*/
MetaData address = connection->getMetaData(objectName);

/* Call getVector to obtain the list of the address object attributes */
vector<MetaData> attributeList = 
      address.getVector(MetaData::ATT_LIST_TYPE_ATTRS);

/* and so on to obtain metadata on other address object specific attributes */

例6-4 参照からのオブジェクト・メタデータの取得方法

この例は、オブジェクトへの参照が使用されているときに、そのオブジェクトに関するメタデータを取得する方法を示しています。

Type ADDRESS(street VARCHAR2(50), city VARCHAR2(20));
Table Person(id NUMBER, addr REF ADDRESS);

/* Create an environment and a connection to the HR database */
.
.
/* Call the getMetaData method on the Connection object obtained */
MetaData perstab_metaData = connection->getMetaData(
      "Person", MetaData::PTYPE_TABLE);

/* Now that you have the metadata information on the Person table,
   call the getxxx methods using the appropriate attributes */
/* Call getString */
cout<<"Schema:"<<(perstab_metaData.getString(MetaData::ATTR_OBJ_SCHEMA))<<endl;

if(perstab_metaData.getInt(perstab_metaData::ATTR_PTYPE)==MetaData::PTYPE_TABLE)
   cout<<"Person is a table"<<endl;
else
   cout<<"Person is not a table"<<endl;

/* Call getVector to obtain the list of columns in the Person table*/
vector<MetaData>listOfColumns;
listOfColumns=perstab_metaData.getVector(MetaData::ATTR_LIST_COLUMNS);

/* Each of the list elements represents a column metadata,
   so now get the data type of the column by passing ATTR_DATA_TYPE
   to getInt */
for(int i=0;i<numCols;i++)
{
   int dataType=colList[i].getInt(MetaData::ATTR_DATA_TYPE);
   /* If the data type is a reference, get the Ref and obtain the metadata
      about the object by passing the Ref to getMetaData */
   if(dataType==SQLT_REF)
      RefAny refTdo=colList[i].getRef(MetaData::ATTR_REF_TDO);

   /* Now you can obtain the metadata about the object as shown
   MetaData tdo_metaData=connection->getMetaData(refTdo);

   /* Now that you have the metadata about the TDO, you can obtain the metadata
      about the object */
}

例6-5 ResultSetオブジェクトからの選択リストに関するメタデータの取得方法

この例は、ResultSetからの選択リストに関するメタデータの取得方法について示しています。

/* Create an environment and a connection to the database */
...
/* Create a statement and associate it with a select clause */
string sqlStmt="SELECT * FROM EMPLOYEES";
Statement *stmt=conn->createStatement(sqlStmt);

/* Execute the statement to obtain a ResultSet */
ResultSet *rset=stmt->executeQuery();

/* Obtain the metadata about the select list */
vector<MetaData>cmd=rset->getColumnListMetaData();

/* The metadata is a column list and each element is a column metaData */
int dataType=cmd[i].getInt(MetaData::ATTR_DATA_TYPE);
...

getMetaDataメソッドがコールされるのは、ATTR_COLLECTION_ELEMENT属性の場合のみです。

属性参照

この項では、スキーマ・オブジェクトとサブスキーマ・オブジェクトに属する属性について説明します。

パラメータ属性

すべての要素には、その要素に固有の属性およびいくつかの汎用属性があります。表6-2では、すべての要素に属する属性について説明します。

表6-2 すべての要素に属する属性

属性 説明 属性のデータ型

ATTR_OBJ_ID

オブジェクトIDまたはスキーマID。

unsigned int

ATTR_OBJ_NAME

オブジェクト名、スキーマ名またはデータベース名。

string

ATTR_OBJ_SCHEMA

オブジェクトが置かれているスキーマ。

string

ATTR_OBJ_PTYPE

パラメータによって記述される情報の型。可能な値は次のとおりです。

PTYPE_TABLE,

PTYPE_VIEW,ビュー

PTYPE_PROC,プロシージャ

PTYPE_FUNC,ファンクション

PTYPE_PKG,パッケージ

PTYPE_TYPE,

PTYPE_TYPE_ATTR、型の属性

PTYPE_TYPE_COLL、型情報のコレクション

PTYPE_TYPE_METHOD、型のメソッド

PTYPE_SYN,シノニム

PTYPE_SEQ、順序

PTYPE_COL、表またはビューの列

PTYPE_ARG、ファンクションまたはプロシージャの引数

PTYPE_TYPE_ARG、型のメソッドの引数

PTYPE_TYPE_RESULT、メソッドの結果

PTYPE_SCHEMA,スキーマ

PTYPE_DATABASE,データベース

int

ATTR_TIMESTAMP

この説明の基礎となるオブジェクトのTIMESTAMP (Oracle DATE形式)。

Timestamp


次の各項では、各種の要素に固有の属性を示しています。

表およびビューの属性

表またはビューのパラメータ(PTYPE_TABLE型またはPTYPE_VIEW型)には、表6-3に記載されている型固有の属性があります。

表6-3 表またはビューに属する属性

属性 説明 属性のデータ型

ATTR_OBJID

オブジェクトID。

unsigned int

ATTR_NUM_COLS

列数。

int

ATTR_LIST_COLUMNS

列リスト(PTYPE_LIST型)。

vector<MetaData>

ATTR_REF_TDO

記述されているオブジェクト型へのREF

RefAny

ATTR_IS_TEMPORARY

表またはビューが一時的であるかどうかを識別します。

bool

ATTR_IS_TYPED

表またはビューが型指定かどうかを識別します。

bool

ATTR_DURATION

一時表の継続時間。指定できる値は次のとおりです。

  • DURATION_SESSION (セッション)

  • DURATION_TRANS (トランザクション)

  • DURATION_NULL (一時表でない表)

int


表に属する追加属性は、表6-4に記載されています。

表6-4 表に固有の属性

属性 説明 属性のデータ型

ATTR_DBA

セグメント・ヘッダーのデータ・ブロック・アドレス。

unsigned int

ATTR_TABLESPACE

表がある表領域。

int

ATTR_CLUSTERED

表をクラスタ化するかどうかを識別します。

bool

ATTR_PARTITIONED

表をパーティション化するかどうかを識別します。

bool

ATTR_INDEX_ONLY

表が索引のみかどうかを識別します。

bool


プロシージャ、ファンクションおよびサブプログラムの属性

プロシージャまたはファンクションのパラメータ(PTYPE_PROC型またはPTYPE_FUNC型)には、表6-5に記載されている型固有の属性があります。

表6-5 プロシージャまたはファンクションに属する属性

属性 説明 属性のデータ型

ATTR_LIST_ARGUMENTS

引数のリスト。「リスト属性」を参照してください。

vector<MetaData>

ATTR_IS_INVOKER_RIGHTS

プロシージャまたはファンクションに対して実行者権限が設定されているかどうかを識別します。

int


パッケージ・サブプログラムに属する追加属性は、表6-6に記載されています。

表6-6 パッケージ・サブプログラムに属する属性

属性 説明 属性のデータ型

ATTR_NAME

プロシージャまたはファンクションの名前。

string

ATTR_OVERLOAD_ID

オーバーロードする側のID番号(これはプロシージャまたはファンクションがパッケージの一部でかつそれらをオーバーロードする場合に必要です)。戻り値は、PL/SQLファンクションまたはプロシージャによる直接問合せとは異なる可能性があります。

int


パッケージ属性

パッケージのパラメータ(PTYPE_PKG型)には、表6-7に記載されている型固有の属性があります。

表6-7 パッケージに属する属性

属性 説明 属性のデータ型

ATTR_LIST_SUBPROGRAMS

サブプログラムのリスト。「リスト属性」を参照してください。

vector<MetaData>

ATTR_IS_INVOKER_RIGHTS

パッケージに対して実行者権限が設定されているかどうかを識別します。

bool


型属性

型のパラメータ(PTYPE_TYPE型)には、表6-8に記載されている属性があります。

表6-8 型に属する属性

属性 説明 属性のデータ型

ATTR_REF_TDO

列の型がオブジェクト型の場合に、型の型記述子オブジェクトのメモリー内REFを戻します。

RefAny

ATTR_TYPECODE

型コードです。指定できる値は次のとおりです。

  • OCCI_TYPECODE_OBJECT

  • OCCI_TYPECODE_NAMEDCOLLECTION

int

ATTR_COLLECTION_TYPECODE

型がコレクションの場合はコレクションの型コードで、それ以外の場合は無効です。指定できる値は次のとおりです。

  • OCCI_TYPECODE_VARRAY

  • OCCI_TYPECODE_TABLE

int

ATTR_VERSION

ユーザーによって割り当てられたバージョンが含まれるNULL終了文字列。

string

ATTR_IS_FINAL_TYPE

最終の型であるかどうかを識別します。

bool

ATTR_IS_INSTANTIABLE_TYPE

インスタンス化可能な型であるかどうかを識別します。

bool

ATTR_IS_SUBTYPE

サブタイプであるかどうかを識別します。

bool

ATTR_SUPERTYPE_SCHEMA_NAME

スーパータイプが含まれているスキーマの名前。

string

ATTR_SUPERTYPE_NAME

スーパータイプの名前。

string

ATTR_IS_INVOKER_RIGHTS

この型が実行者権限であるかどうかを識別します。

bool

ATTR_IS_INCOMPLETE_TYPE

この型が不完全かどうかを識別します。

bool

ATTR_IS_SYSTEM_TYPE

システムの型であるかどうかを識別します。

bool

ATTR_IS_PREDEFINED_TYPE

事前定義の型であるかどうかを識別します。

bool

ATTR_IS_TRANSIENT_TYPE

一時的な型であるかどうかを識別します。

bool

ATTR_IS_SYSTEM_GENERATED_TYPE

システム生成の型であるかどうかを識別します。

bool

ATTR_HAS_NESTED_TABLE

この型にネストした表の属性があるかどうかを識別します。

bool

ATTR_HAS_LOB

この型にLOB属性があるかどうかを識別します。

bool

ATTR_HAS_FILE

この型にFILE属性があるかどうかを識別します。

bool

ATTR_COLLECTION_ELEMENT

コレクション要素へのハンドル。

「コレクション属性」を参照してください。

MetaData

ATTR_NUM_TYPE_ATTRS

型属性の数。

unsigned int

ATTR_LIST_TYPE_ATTRS

型属性のリスト。

「リスト属性」を参照してください。

vector<MetaData>

ATTR_NUM_TYPE_METHODS

型メソッドの数。

unsigned int

ATTR_LIST_TYPE_METHODS

型メソッドのリスト。

「リスト属性」を参照してください。

vector<MetaData>

ATTR_MAP_METHOD

型のマップ・メソッド。

「型メソッド属性」を参照してください。

MetaData

ATTR_ORDER_METHOD

型のオーダー・メソッド。「型メソッド属性」を参照してください。

MetaData


型属性の属性

型の属性のパラメータ(PTYPE_TYPE_ATTR型)には、表6-9に記載されている属性があります。

表6-9 型属性に属する属性

属性 説明 属性のデータ型

ATTR_DATA_SIZE

型属性の最大サイズ。この長さは、文字列および行の文字数ではなくバイト数で戻されます。NUMBERについては22が戻されます。

int

ATTR_TYPECODE

型コード。

int

ATTR_DATA_TYPE

型属性のデータ型

int

ATTR_NAME

型属性名である文字列へのポインタ。

string

ATTR_PRECISION

数値型属性の精度。精度が0 (ゼロ)以外でスケールが-127の場合はFLOATで、それ以外の場合はNUMBER(p, s)です。精度が0 (ゼロ)の場合は、NUMBER(p, s)を単にNUMBERと表すことができます。

int

ATTR_SCALE

数値型属性のスケール。精度が0 (ゼロ)以外でスケールが-127の場合はFLOATで、それ以外の場合はNUMBER(p, s)です。精度が0 (ゼロ)の場合は、NUMBER(p, s)を単にNUMBERと表すことができます。

int

ATTR_TYPE_NAME

型名である文字列。データ型がSQLT_NTYまたはSQLT_REFである場合、戻り値には型名が含まれます。データ型がSQLT_NTYである場合、名前付きデータ型の型の名前が戻されます。データ型がSQLT_REFである場合、REFが指す名前付きデータ型の型名が戻されます。

string

ATTR_SCHEMA_NAME

型が作成されたスキーマ名が含まれる文字列。

string

ATTR_REF_TDO

列型がオブジェクト型である場合に、型のTDOのメモリー内REFが戻されます。

RefAny

ATTR_CHARSET_ID

型属性が文字列またはキャラクタ・タイプである場合のキャラクタ・セットID。

int

ATTR_CHARSET_FORM

型属性が文字列またはキャラクタ・タイプである場合のキャラクタ・セット・フォーム。

int

ATTR_FSPRECISION

日時または間隔における秒の小数部分の精度。

int

ATTR_LFPRECISION

間隔における整数部分のフィールドの精度。

int


型メソッド属性

型のメソッドのパラメータ(PTYPE_TYPE_METHOD型)には、表6-10に記載されている属性があります。

表6-10 型メソッドに属する属性

属性 説明 属性のデータ型

ATTR_NAME

メソッド(プロシージャまたはファンクション)の名前。

string

ATTR_ENCAPSULATION

メソッドのカプセル化レベル。指定できる値は次のとおりです。

  • OCCI_TYPEENCAP_PRIVATE

  • OCCI_TYPEENCAP_PUBLIC

int

ATTR_LIST_ARGUMENTS

引数のリスト。

vector<MetaData>

ATTR_IS_CONSTRUCTOR

メソッドがコンストラクタであるかどうかを識別します。

bool

ATTR_IS_DESTRUCTOR

メソッドがデストラクタであるかどうかを識別します。

bool

ATTR_IS_OPERATOR

メソッドが演算子であるかどうかを識別します。

bool

ATTR_IS_SELFISH

メソッドが自己参照であるかどうかを識別します。

bool

ATTR_IS_MAP

メソッドがマップ・メソッドであるかどうかを識別します。

bool

ATTR_IS_ORDER

メソッドがオーダー・メソッドであるかどうかを識別します。

bool

ATTR_IS_RNDS

メソッドに対して「Read No Data State」が設定されているかどうかを識別します。

bool

ATTR_IS_RNPS

メソッドに対して「Read No Process State」が設定されているかどうかを識別します。

bool

ATTR_IS_WNDS

メソッドに対して「Write No Data State」が設定されているかどうかを識別します。

bool

ATTR_IS_WNPS

メソッドに対して「Write No Process State」が設定されているかどうかを識別します。

bool

ATTR_IS_FINAL_METHOD

最終のメソッドであるかどうかを識別します。

bool

ATTR_IS_INSTANTIABLE_METHOD

インスタンス化可能なメソッドであるかどうかを識別します。

bool

ATTR_IS_OVERRIDING_METHOD

オーバーライドする側のメソッドであるかどうかを識別します。

bool


コレクション属性

コレクション型のパラメータ(PTYPE_COLL型)には、表6-11に記載されている属性があります。

表6-11 コレクション型に属する属性

属性 説明 属性のデータ型

ATTR_DATA_SIZE

型属性の最大サイズ。この長さは、文字列および行の文字数ではなくバイト数で戻されます。NUMBERについては22が戻されます。

int

ATTR_TYPECODE

Typecode。

int

ATTR_DATA_TYPE

型属性のデータ型。

int

ATTR_NUM_ELEMENTS

配列内の要素数。配列であるコレクションについてのみ有効です。

unsigned int

ATTR_NAME

型属性名である文字列へのポインタ。

string

ATTR_PRECISION

数値型属性の精度。精度が0 (ゼロ)以外でスケールが-127の場合はFLOATで、それ以外の場合はNUMBER(p, s)です。精度が0 (ゼロ)の場合は、NUMBER(p, s)を単にNUMBERと表すことができます。

int

ATTR_SCALE

数値型属性のスケール。精度が0 (ゼロ)以外でスケールが-127の場合はFLOATで、それ以外の場合はNUMBER(p, s)です。精度が0 (ゼロ)の場合は、NUMBER(p, s)を単にNUMBERと表すことができます。

int

ATTR_TYPE_NAME

型名である文字列。データ型がSQLT_NTYまたはSQLT_REFである場合、戻り値には型名が含まれます。データ型がSQLT_NTYである場合、名前付きデータ型の型の名前が戻されます。データ型がSQLT_REFである場合、REFが指す名前付きデータ型の型名が戻されます

string

ATTR_SCHEMA_NAME

型が作成されたスキーマ名が含まれる文字列。

string

ATTR_REF_TDO

型のTDOのメモリー内REFが戻されます。

RefAny

ATTR_CHARSET_ID

Typecode。

int

ATTR_CHARSET_FORM

型属性のデータ型。

int


シノニム属性

シノニムのパラメータ(PTYPE_SYN型)には、表6-12に記載されている属性があります。

表6-12 シノニムに属する属性

属性 説明 属性のデータ型

ATTR_OBJID

オブジェクトID。

unsigned int

ATTR_SCHEMA_NAME

シノニム変換のスキーマ名が含まれるNULL終了文字列。

string

ATTR_NAME

シノニム変換のオブジェクト名が含まれるNULL終了文字列。

string

ATTR_LINK

シノニム変換のデータベース・リンク名が含まれるNULL終了文字列。

string


順序属性

順序のパラメータ(PTYPE_SEQ型)には、表6-13に記載されている属性があります。

表6-13 順序に属する属性

属性 説明 属性のデータ型

ATTR_OBJID

オブジェクトID。

unsigned int

ATTR_MIN

最小値(Oracle NUMBER形式)。

Number

ATTR_MAX

最大値(Oracle NUMBER形式)。

Number

ATTR_INCR

増分数(Oracle NUMBER形式)。

Number

ATTR_CACHE

キャッシュされた順序番号の数。順序がキャッシュされた順序でない場合は、0 (ゼロ)となります(Oracle NUMBER形式)。

Number

ATTR_ORDER

順序が順序指定されているかどうかを識別します。

bool

ATTR_HW_MARK

最高水位標(Oracle NUMBER形式)。

Number


列属性

表またはビューの列のパラメータ(PTYPE_COL型)には、表6-14に記載されている属性があります。

表6-14 表またはビューの列に属する属性

属性 説明 属性のデータ型

ATTR_DATA_SIZE

列の最大サイズ。この長さは、文字列および行の文字数ではなくバイト数で戻されます。NUMBERについては22が戻されます。

int

ATTR_DATA_TYPE

列のデータ型。

Type

ATTR_NAME

列名である文字列へのポインタ。

string

ATTR_PRECISION

精度を戻します。

int

ATTR_SCALE

数値列のスケール。精度が0 (ゼロ)以外でスケールが-127の場合はFLOATで、それ以外の場合はNUMBER(p, s)です。精度が0 (ゼロ)の場合は、NUMBER(p, s)を単にNUMBERと表すことができます。

int

ATTR_IS_NULL

列にnull値が許可されていない場合、FALSEが戻されます。

bool

ATTR_TYPE_NAME

型名である文字列が戻されます。データ型がOCCI_SQLT_NTYまたはOCCI_SQLT_REFである場合、戻り値には型名が含まれます。データ型がOCCI_SQLT_NTYである場合、名前付きデータ型の型の名前が戻されます。データ型がOCCI_SQLT_REFである場合、REFが指す名前付きデータ型の型名が戻されます。

string

ATTR_SCHEMA_NAME

型が作成されたスキーマ名が含まれる文字列が戻されます。

string

ATTR_REF_TDO

列型がオブジェクト型である場合の、型のTDOのREF

RefAny

ATTR_CHARSET_ID

文字の列のキャラクタ・セットID。設定されていない場合、キャラクタ・セットIDのデフォルトは直接パス・コンテキストで設定されたキャラクタ・セットIDになります。

int

ATTR_CHARSET_FORM

列のキャラクタ・セット・フォーム。この属性を設定すると、クライアント側のデータベースまたは各国語キャラクタ・セットの使用が指定されます。

int


引数属性および結果属性

引数、プロシージャ型またはファンクション型(PTYPE_ARG型)、型メソッド引数(PTYPE_TYPE_ARG型)、あるいはメソッド結果(PTYPE_TYPE_RESULT型)のパラメータには、表6-15で説明している属性があります。

表6-15 引数または結果に属する属性

属性 説明 属性のデータ型

ATTR_NAME

引数名である文字列へのポインタが戻されます。

string

ATTR_POSITION

引数リスト内の引数の位置。常に0が戻されます。

int

ATTR_TYPECODE

Typecode。

int

ATTR_DATA_TYPE

引数のデータ型。

int

ATTR_DATA_SIZE

引数のデータ型のサイズ。この長さは、文字列および行の文字数ではなくバイト数で戻されます。NUMBERについては22が戻されます。

int

ATTR_PRECISION

数値引数の精度。精度が0 (ゼロ)以外でスケールが-127の場合はFLOATで、それ以外の場合はNUMBER(p, s)です。精度が0 (ゼロ)の場合は、NUMBER(p, s)を単にNUMBERと表すことができます。

int

ATTR_SCALE

数値引数のスケール。精度が0 (ゼロ)以外でスケールが-127の場合はFLOATで、それ以外の場合はNUMBER(p, s)です。精度が0 (ゼロ)の場合は、NUMBER(p, s)を単にNUMBERと表すことができます。

int

ATTR_LEVEL

データ型レベル。この属性では常に0が戻されます。

int

ATTR_HAS_DEFAULT

引数にデフォルト値があるかどうかを示します。

int

ATTR_LIST_ARGUMENTS

引数がレコードまたは表の型である場合の、次レベルにある引数のリスト。

vector<MetaData>

ATTR_IOMODE

引数モードを示します。有効な値は次のとおりです。

  • IN (OCCI_TYPEPARAM_IN)の場合は0

  • OUT (OCCI_TYPEPARAM_OUT)の場合は1

  • IN/OUT (OCCI_TYPEPARAM_INOUT)の場合は2

int

ATTR_RADIX

基数が戻されます(数値型の場合)。

int

ATTR_IS_NULL

列にNULL値が許可されていない場合、FALSEが戻されます。

bool

ATTR_TYPE_NAME

型名(またはパッケージのローカル型の場合はパッケージ名)である文字列が戻されます。データ型がSQLT_NTYまたはSQLT_REFである場合、戻り値には型名が含まれます。データ型がSQLT_NTYである場合、名前付きデータ型の型の名前が戻されます。データ型がSQLT_REFである場合、REFが指す名前付きデータ型の型名が戻されます。

string

ATTR_SCHEMA_NAME

SQLT_NTYまたはSQLT_REFの場合、型が作成されたスキーマ名(またはローカル・パッケージ型の場合はパッケージ名)が含まれる文字列が戻されます。

string

ATTR_SUB_NAME

SQLT_NTYまたはSQLT_REFの場合、型名が含まれる文字列が戻されます。

string

ATTR_LINK

SQLT_NTYまたはSQLT_REFの場合、型が存在するデータベースのデータベース・リンク名が含まれる文字列が戻されます。パッケージがリモートの場合に、パッケージのローカル型に対してのみ該当します。

string

ATTR_REF_TDO

引数型がオブジェクトである場合、型のTDOのREFが戻されます。

RefAny

ATTR_CHARSET_ID

引数が文字列またはキャラクタ・タイプである場合、キャラクタ・セットIDが戻されます。

int

ATTR_CHARSET_FORM

引数が文字列またはキャラクタ・タイプである場合、キャラクタ・セット・フォームが戻されます。

int


リスト属性

リスト内のすべての要素についてリスト型の属性を記述できます。ファンクション引数リストの場合、位置0には戻り値のパラメータがあります(PTYPE_ARG)。

すべての要素についてリストが繰り返し記述されます。結果はC++ vector<MetaData>に格納されます。リスト型の属性を記述するには、getVector()メソッドをコールします。表6-16にリスト属性を示しています。

表6-16 ATTR_LIST_TYPEの値

可能な値 説明

ATTR_LIST_COLUMNS

列リスト

ATTR_LIST_ARGUMENTS

プロシージャまたはファンクションの引数リスト

ATTR_LIST_SUBPROGRAMS

サブプログラム・リスト

ATTR_LIST_TYPE_ATTRIBUTES

型属性リスト

ATTR_LIST_TYPE_METHODS

型メソッド・リスト

ATTR_LIST_OBJECTS

スキーマ内のオブジェクト・リスト

ATTR_LIST_SCHEMAS

データベース内のスキーマ・リスト


スキーマ属性

スキーマ型のパラメータ(PTYPE_SCHEMA型)には、表6-17に記載されている属性があります。

表6-17 スキーマに固有の属性

属性 説明 属性のデータ型

ATTR_LIST_OBJECTS

スキーマ内のオブジェクトのリスト

string


データベース属性

データベースのパラメータ(PTYPE_DATABASE型)には、表6-18に記載されている属性があります。

表6-18 データベースに固有の属性

属性 説明 属性のデータ型

ATTR_VERSION

データベースのバージョン。

string

ATTR_CHARSET_ID

サーバー・ハンドルからのデータベース・キャラクタ・セットID。

int

ATTR_NCHARSET_ID

サーバー・ハンドルからのデータベース・ネイティブ・キャラクタ・セットID。

int

ATTR_LIST_SCHEMAS

データベース内のスキーマのリスト(PTYPE_SCHEMA型)。

vector<MetaData>

ATTR_MAX_PROC_LEN

プロシージャ名の最大長。

unsigned int

ATTR_MAX_COLUMN_LEN

列名の最大長。

unsigned int

ATTR_CURSOR_COMMIT_BEHAVIOR

データベース内のカーソルおよびプリコンパイルされた文に対するCOMMIT操作の効果。値は次のとおりです。

  • OCCI_CURSOR_OPEN (コミット操作前のカーソルの状態を保持)

  • OCCI_CURSOR_CLOSED (カーソルはCOMMIT時にクローズされるものの、アプリケーションは文を再プリコンパイルなしで再度実行可能)

int

ATTR_MAX_CATALOG_NAMELEN

カタログ(データベース)名の最大長。

int

ATTR_CATALOG_LOCATION

修飾表内のカタログの位置。値は次のとおりです。

  • OCCI_CL_START

  • OCCI_CL_END

int

ATTR_SAVEPOINT_SUPPORT

データベースがセーブポイントをサポートしているかどうかを識別します。値は次のとおりです。

  • OCCI_SP_SUPPORTED

  • OCCI_SP_UNSUPPORTED

int

ATTR_NOWAIT_SUPPORT

データベースがNOWAIT句をサポートしているかどうかを識別します。値は次のとおりです。

  • OCCI_NW_SUPPORTED

  • OCCI_NW_UNSUPPORTED

int

ATTR_AUTOCOMMIT_DDL

DDL文に自動コミット・モードが必須かどうかを識別します。値は次のとおりです。

  • OCCI_AC_DDL

  • OCCI_NO_AC_DDL

int

ATTR_LOCKING_MODE

データベースのロック・モード。値は次のとおりです。

  • OCCI_LOCK_IMMEDIATE

  • OCCI_LOCK_DELAYED

int