拡張レベル関数 - ODBC Driver for Teradata

ODBC Driver for Teradata® ユーザー ガイド

Product
ODBC Driver for Teradata
Release Number
16.20
Published
2018年10月
Language
日本語
Last Update
2019-02-12
dita:mapPath
ja-JP/fxv1527114222338.ditamap
dita:ditavalPath
ja-JP/fxv1527114222338.ditaval
dita:id
B035-2526
Product Category
Teradata Tools and Utilities

次の表は、拡張レベル関数とその目的の一覧です。

新機能により実装に変更があったか下位互換性を考慮して残された、バージョン1.xおよび2.xの関数。
関数名 目的
SQLBindCol 結果セット内の各列にアプリケーション データ バッファをバインドします。
SQLBindParameter SQL文中のパラメータ マーカーにデータ バッファをバインドします。

SQLBindParameterは、パラメータ長(pcbValue)がSQL_NULL_DATAに等しい場合、パラメータ データ(rgbValue)のNULLポインタを受け入れます。SQLBindParameterがサポートするパラメータの最大数は256です。

ストアド プロシージャには、最大で1024個のパラメータを含めることができます。ただし、Teradata Databaseはこの数のパラメータを格納しサポートするものの、ODBC Driver for TeradataにはSQLBindParameterの制約があるため、257個以上のパラメータを含むストアド プロシージャを実行できません。

SQL_DATA_AT_EXECでのバインド展開に依存しているプロシージャ(マクロ)のデフォルト パラメータ(pcbValue= SQL_DEFAULT_PARAM)は、インプリメントされていません。

SQLBindParameterの引数ColumnSizeは、次のいずれかに設定する必要があります。
  • 伝送されることが予想される最大オブジェクトのサイズ(パフォーマンス向上のためには、こちらが推奨されています)
  • 伝送されるオブジェクトのサイズ
Unicode文字列の場合、最大ColumnSizeは32000文字です。
SQL文字またはバイナリにバインドするときに、StrLen_or_IndPtrがNULLでColumnSizeがゼロの場合、ドライバは、SQLBindParameterからHY104を報告しませんが、実行の間にパラメータにバインドされるデータを警告と共に切り捨てます。
SQLBrowseConnect データ ソースへの接続に必要な属性と属性値を検出します。
SQLCancel ステートメントの処理を取り消します。
SQLColumnPrivileges 1つ以上のテーブルの列および関連する権限のリストを返します。バージョン2.xのSQLColumnPrivilegeに代わって、コア レベル ドライバに組み込まれているレベル2の機能です。

ANSIでは列レベルの権限が定義されているため、ODBC Driver for Teradataは、テーブルに関連付けられた列権限を返します。テーブルのすべての列に特定の権限がある場合には、ODBC Driver for Teradataは、列名として値ALLを返します。

SQLColumns 1つ以上のテーブルにある列名のリストを返します。

SQLColumnsは、最大22列のテーブルやビューの列情報を返します。SQLColumns()を使用するためには、対象となる(複数の)テーブルに対するSELECT権限が必要です。

SQLDataSources 使用可能なデータ ソースに関する情報を返します。
SQLDescribeCol 結果セット内の列について、列名、タイプ、列サイズ、桁数と、NULL可能性を返します。列0のブックマーク メタ データの抽出はサポートされていません

デフォルトでは、SQLDescribeColおよびSQLColAttributeは、Teradataの列タイトルの代わりに列名を返します。アプリケーションで、ODBC Driver for Teradataが実際の列名ではなく列タイトルを返すようにする場合は、使用するDSNのTeradata ODBC Driver Options(Teradata ODBCドライバ オプション)ダイアログ ボックスのUse Column Names(列名を使用する)オプションの選択を解除するか、UNIX OSでDontUseTitles = Noを設定する必要があります。

実際の列名の代わりに列タイトルを返すと、Crystal Reportsなどの一部のアプリケーションで問題が発生することがあります。これは、そのアプリケーションが、列タイトルではなく列名が返されることを想定しているためです。

SQLDescribeColおよびSQLColAttributeは、INTEGER FORMAT 99:99:99またはFLOAT FORMAT 99:99:99として定義されている結果セットの列に対してSQL型のSQL_TIMEを返します。これらの列は、SQL_C_TIMEデータか、その他の時刻データ変換可能な形式に取り込まれます。

SQLColAttributeは、列のDBC FORMATに、FORMAT ‘$$$,$$9.99’というようにドル記号が含まれている場合に、その列が通貨タイプであることを示します。この情報は、アプリケーションが結果データの形式設定をする場合に役立ちます。

SQLDescribeParam EnableExtendedStmtInfo機能が有効なときに、ODBC Driver for Teradataによってサポートされます。

SQLDescribeParamは、作成したSQL文に関連付けられているパラメータ マーカーに対応する列または式のメタデータを返します。このメタデータは、インプリメント パラメータ記述(IPD)のフィールドでも使用できます。SQLDescribeParamの詳細については、ODBCの仕様を参照してください。

SQLDisconnect 接続ハンドルに関連する接続をクローズします。
SQLDriverConnect 接続文字列を使用して特定のドライバに接続するか、ドライバ マネージャとODBC Driver for Teradataに対して接続ダイアログ ボックスを表示するよう要求します。
SQLDrivers インストールされているドライバとその属性のリストを返します。
SQLExecDirect あらかじめ準備されたものではないステートメントを実行します。
SQLExecute あらかじめ準備してあったステートメントを実行します。
SQLFetch 次の行データ セットを結果セットから取り出し、バインドされた列すべてのデータを返します。
SQLForeignKeys テーブルに外部キーを構成する列がある場合、列名のリストを返します。これはレベル2の実装です。
SQLGetCursorname ステートメントに関連するカーソル名を返します。
SQLGetData 結果セットの1行分の列をすべて、または一部を返します。
SQLGetFunctions サポートされるODBC Driver for Teradata API関数に関する情報を返します。
SQLGetInfo 接続に関連するODBC Driver for Teradataおよびデータ ソースに関する一般情報を返します。
Teradata Databaseリリース14.0以降に接続している場合は、SQLGetInfo(SQL_KEYWORDS)を含むクエリーを実行すると、Teradata Databaseからキーワードのリストが返されます。このため、旧リリースよりも実行時間が長くなる場合があります。
SQLGetTypeInfo データ ソースがサポートするデータ型に関する情報を返します。さらに、ドライバ型を表わす値を返します。
SQLMoreResults 入手可能な結果セットが他にもあるかどうかを識別します。結果セットがある場合、SQLMoreResultsは次の結果セットのための処理を初期化します。これはレベル1の関数です。
SQLNativeSql ODBC Driver for Teradataがコード変換するSQL文のテキストを返します。
SQLNumParams SQL文中のパラメータの数を返します。
SQLNumResultCols 結果セット内の列数を返します。
SQLParamData SQLPutDataがステートメントの実行時に使用するパラメータ データを供給します。
SQLPrepare 実行するためにSQL文を準備します。
SQLPrimaryKeys テーブルのプライマリ キーを構成する列名を返します。
SQLProcedureColumns 入力/出力パラメータのリスト、ドライバ型、およびプロシージャの結果セットを構成する列を返します。
SQLProcedures データ ソース内のプロシージャ名のリストを返します。
SQLPutData パラメータのデータ値の一部またはすべてを送信します。SQLPutData()は、パラメータ データをいくつかにまとめて配置できません。
SQLRowCount UPDATE文、INSERT文、DELETE文によって影響を受ける行数を返します。

SQLExecuteまたはSQLExecDirectの実行後、SQLRowCountを呼び出して、SELECT文を含むあらゆるタイプのSQL文についてのDBCアクティビティ カウントを取得できます。

移植性を考えると、アプリケーションがこの動作に依存することは望ましくありません。その他のODBCドライバは、SELECT文の後に、行数ではなく-1を返す場合があるからです。

SQLSetCursorName アクティブ ステートメントにカーソル名を関連付けます。
SQLSpecialColumns 指定されたテーブル内の行を一意に識別する最適な列セットか、行内のいずれかの値が更新された場合に自動更新される列に関する情報を返します。

SQLSpecialColumns()が正しく機能するのは、ビューが単一のテーブルをベースにして、その表に固有インデックスが1つしかない場合に限ります。

SQLSpecialColumns()は、テーブルで正しく動作します。

SQLStatistics 単一のテーブルに関する統計値およびテーブルに関連付けられているインデックス リストを返します。

SQLStatistics()は、テーブルのインデックスに関する情報を取得し、インデックスのカーディナリティ統計値を提供します。ただし、ページ数は推測値となります。基本テーブルの場合には正しいページ数が返されます(1ページは4096バイトと仮定)が、ビューの場合は0に設定されます。

SQLStatistics()は、SQL_ENSUREが設定されている場合に限り、テーブル自体の正確なカーディナリティ統計値を返します。それ以外の場合は、基本テーブルのカーディナリティは、テーブルにある任意のインデックスの最大カーディナリティ値に設定されます(固有インデックスがある場合は、通常この値は正確です)。

ドライバがテーブルのカーディナリティ値を正確に取得するには、SELECT COUNT(*) FROM tableを指定して実行するしかないため、SQL_ENSUREはかなり遅くなります。

パラメータ値としてSQL_ENSUREが使用された関数SQLStatistics()が呼び出された場合、この関数は小さいテーブルに限り正確です。

大きなテーブルの場合、SQL_ENSUREを使用すると、そのテーブルを長期間使用できなくなることがあるので、代わりにSQL_QUICKメソッドを使うことで、大半のアプリケーションに適したカーディナリティとページ数の概算値が得られます。

Windowsでは、SQLStatistics()は、指定したテーブルのインデックス情報を返します。このため、テーブルのビューを使って読み取りや更新ができます。インデックス生成用に指定されたODBC文法準拠のユーザー定義インデックス名がレジストリー(IndexName0-9)のDSN登録項に定義されている場合は、インデックス名としてSQLStatistics()に返されるようになりました。ODBC形式の名前付きインデックスは廃止される予定なので、推奨されません。詳細については、ODBC形式の名前付きインデックス(15.00で廃止)を参照してください。

次の場合は、Teradataのインデックス名が返されます。
  • ユーザーがODBC文法に従ったインデックス名を指定しなかった場合(Teradata SQL文法を使用した場合)。
  • IndexNameの登録項がDSN登録項で再利用された場合。
  • SQLStatistics()を実行中のPCが、インデックス生成時のPCと異なる場合。

例えば、MyIndexというテーブルのインデックスを作成する際に、ODBC文法の構文に従って、MyTableというインデックス名が使用されています。

Teradata内部でテーブルのインデックスとしてMyTable001を作成しましたが、SQLStatistics()は、MyTable001ではなくMyIndexをインデックス名として返しました。これは、DSN登録項に、MyTableのこのインデックス名が含まれているからです。それ以外のPCの場合は、MyTable001がインデックス名として返されます。

SQLTablePrivileges テーブルのリストと、各テーブルに関連付けられている権限を返します。これはレベル2の機能です。

ODBC Driver for Teradataは、指定されたhstmtに関する情報を結果セットとして返します。

結果セットの内容は次のとおりです。

PRIVILEGE: テーブルの権限を特定します。特定できるのは、次のいずれかの権限か、またはデータ ソース固有の権限です。

SELECT: テーブルの1つ以上の列にあるデータを取得する権限が与えられます。

INSERT: 1つ以上の列にデータある行をテーブルに新規挿入する権限が与えられます。

UPDATE:テーブルの1つ以上の列にあるデータを変更する権限が与えられます。

DELETE: テーブルから1つ以上の行を削除する権限が与えられます。

REFERENCES: 制約内(例、一意制約、参照制約、またはテーブル チェック制約)の1つ以上の列に対して参照する権限が与えられます。特定のテーブルの権限に関して、保証されている操作の範囲は、データ ソースごとに異なります。例えば、UPDATE権限は、1つのデータ ソース上の1つのテーブルにあるすべての列、および、他のデータ ソースについては権限の設定者がUPDATE権限を持っている列のみに変更許可を保証できます。

SQLTables データ ソース内のテーブル名のリストを返します。

SQLTablesは、その表示を制限するために、VIEW、TABLE、およびSYSTEM TABLEタイプを受け入れます。また、DBCテーブルやビューは、ODBCアプリケーションによる処理を簡単にするために、DBCとしてログインする場合を除き、SYSTEM TABLEタイプとして返されます。ユーザーDBCとしてログインした場合は、DBCテーブルはTABLEタイプとして返されます。

'GLOBAL TEMPORARY'か'TEMPORARY'をテーブル タイプとして指定できます。揮発テーブルの情報はTeradataのデータ ディクショナリに保存されないため、ODBC Driver for Teradataは、揮発テーブルの情報を提供できません。