ODBC エンジン リファレンス
制限、接続文字列、および ODBC のサポート
この章では、Pervasive PSQL v11 SP3 ODBC インターフェイスの制限とサポートについて説明します。
ODBC API、SQL 文法、およびスカラー関数の詳細については、『Microsoft ODBC Programmer's Reference』を参照してください。
メタデータのバージョン
Pervasive PSQL のリレーショナル インターフェイスでは、メタデータでバージョン 1(V1)とバージョン 2(V2)という 2 つのバージョンをサポートします。
メタデータのバージョンはデータベース プロパティの 1 つで、データベースの作成時に指定します。デフォルトは "メタデータ バージョン 1" です。"メタデータ バージョン 2" にする場合は、データベースを作成する際に指定する必要があります。
メタデータのバージョンは、そのデータベース内のすべてのデータ辞書ファイル(DDF)に適用されます。単独のデータベースで、メタデータ バージョン 1 を使用する DDF とメタデータ バージョン 2 を使用する DDF を一緒に使用することはできません。2 つのバージョンの DDF はそれぞれ情報をやり取りすることができません。
ただし、データベース エンジンで複数のデータベースへ同時にアクセスすれば、そのデータベースごとにメタデータ バージョン 1 またはメタデータ バージョン 2 を使用することができます。
Pervasive PSQL v10 より前の Pervasive PSQL バージョンで作成されたデータベースはすべてメタデータ バージョン 1 を使用します。Pervasive PSQL v10 以降を使って作成されたデータベースは、データベースの設定に応じてどちらかのメタデータ バージョンを使用しています。
メタデータのバージョンの比較
メタデータ バージョン 2 では、多くの識別子名に最大 128 バイトの名前を付けることができます。詳細については、
Pervasive PSQL 機能の制限/条件を参照してください。またメタデータ バージョン 2 では、ビューおよびストアド プロシージャに対する権限が認められます。
ビューおよびストアド プロシージャに対する権限を参照してください。
メタデータ バージョン 2 のデータ辞書ファイル(DDF)には、バージョン 1 用とは異なる名前が付けられます。多くの場合、バージョン 2 の DDF には追加フィールドや既存フィールドへの変更が含まれています。
システム テーブルを参照してください。
変換ユーティリティ
Pervasive PSQL には pvmdconv という、メタデータ バージョン 1 からメタデータ バージョン 2 へ変換するための変換ユーティリティが付属しています。『
Pervasive PSQL User's Guide』の
pvmdconv を参照してください。
リレーショナル インターフェイスの制限
次の表は、リレーショナル インターフェイスの機能に適用される制限または条件を示します。
Pervasive PSQL データベースには、40 億のオブジェクトをさまざまに組み合わせて含むことができます。オブジェクトはデータ辞書ファイルに保存されます。
開発者リファレンス『
Pervasive PSQL Programmer's Guide』の
名前付け規則も参照してください。
表 19 Pervasive PSQL 機能の制限/条件
Pervasive PSQL 機能 | 制限または条件 | メタデータ |
| | V1 | V2 |
ストアド プロシージャのパラメーター リスト内の引数の数 | 300 | | |
CHAR 列のサイズ | 8,000 バイト1 | | |
文字列リテラル | 文字列内の文字は、10 進数値 1 から 255 の間のいずれかの ANSI 文字になります。 | | |
テーブル内の列数 | 1,536 | | |
トリガーまたはストアド プロシージャで使用可能な列数 | 300 | | |
列名2 | 20 バイト | | |
128 バイト | | |
列のサイズ | 2 GB | | |
相関名 | メモリによる制限 | | |
カーソル名 | 18 バイト | | |
データベース名2 | 20 バイト | | |
データベース セッション数 | メモリによる制限 | | |
データ ファイル パス名 | 64 バイト(データ ファイル パス名の最大長は Xf$Loc パスおよびデータ ファイル パスの組み合わせです) | | |
250 バイト(データ ファイル パス名の最大長は Xf$Loc パスおよびデータ ファイル パスの組み合わせです) | | |
関数(ユーザー定義)名2 | 30 バイト | | |
128 バイト | | |
グループ名2 | 30 バイト | | |
128 バイト | | |
インデックス名2 | 20 バイト | | |
128 バイト | | |
キー名2 | 20 バイト | | |
128 バイト | | |
ラベル名 | メモリによる制限 | | |
AND でつないだ述部の数 | 300 | | |
データベース オブジェクトの数 | 65,536 | | |
20 億 | | |
パラメーター名 | 126 バイト | | |
パスワード2 | 8 バイト | | |
128 バイト | | |
プロシージャ名2 | 30 バイト | | |
128 バイト | | |
参照整合性(RI)の制約名 | 20 バイト | | |
128 バイト | | |
一重引用符の表記 | 2 つの連続した一重引用符('') | | |
結果名 | メモリによる制限 | | |
セーブポイント名 | メモリによる制限 | | |
クエリ内の SELECT リストの列数 | 1,600 | | |
SQL ステートメント内の単独項目(引用符で囲まれたリテラル文字列)のサイズ | ヌル終端文字と引用符を除き、14,997(合計 15,000) | | |
SQL ステートメントの長さ | 64 KB | | |
セッションあたりの SQL ステートメント数 | メモリによる制限 | | |
ストアド プロシージャのサイズ | 64 KB | | |
テーブル名2 | 20 バイト | | |
128 バイト | | |
テーブルの行数 | 20 億 | | |
クエリあたりの結合テーブル数 | メモリによる制限 | | |
トリガー名2 | 20 バイト | | |
128 バイト | | |
ユーザー名2 | 30 バイト | | |
128 バイト | | |
VARCHAR 列のサイズ | 8,000 バイト1 | | |
変数名 | メモリによる制限 | | |
ビュー名2 | 20 バイト | | |
128 バイト | | |
1 CHAR 列または VARCHAR 列で、完全にインデックス化できる列の最大サイズは 255 バイトです。 2 『 Advanced Operations Guide』の 識別子の種類別の制限を参照してください。 |
完全修飾オブジェクト名
完全修飾されたオブジェクト名は、ドット表記でデータベース名とオブジェクトを結合します。たとえば、mydbase というデータベースに myview というビューがある場合、完全修飾オブジェクト名は mydbase.myview となります。
完全修飾オブジェクト名はデータベース内で一意である必要があります。たとえば、データベース "mydbase" に "acctpay" というテーブルとユーザー定義関数(またはその他のオブジェクト)"acctpay" があるとします。この場合、Pervasive PSQL は完全修飾名の "maydbase.acctpay" がどのオブジェクトを参照するのか識別できません。
データ ソース名接続文字列キーワード
DSN への接続に使用される接続文字列には、ドライバーの定義済みキーワードをいくつでも含むことができます。これらのキーワードを使用することにより、ドライバーはデータ ソースへ接続するのに十分な情報を得ることができます。ドライバーは、データ ソースとの接続に必要なキーワードを定義します。
Pervasive PSQL の接続文字列およびキーワードの完全な説明については、
ODBC 接続文字列を参照してください。
ODBC サポート
ODBC インターフェイスのサポート
リレーショナル インターフェイスは、コア、レベル 1、およびレベル 2 のインターフェイス サポート レベルに対する ODBC v3.51 仕様をサポートしています。
ODBC インターフェイス サポートの例外
コア レベル
SQL_BEST_ROWID
リレーショナル インターフェイスでは、テーブル内の行を識別する最適な列セットとして固有のインデックスが使用されます。
IDENTITY 列のあるテーブルに新しい列を挿入した場合、リレーショナル インターフェイスは IDENTITY 列に割り当てられた値を返しません。IDENTITY 列の値は @@IDENTITY 変数を使用することによって判断できます。
@@IDENTITY を参照してください。
レベル 2
SQL_ROWVER
上記の SQL_BEST_ROWID を参照してください。
SQL_ATTR_LOGIN_TIMEOUT
サポートされていません
ODBC API サポート
次の表は、リレーショナル インターフェイスによりサポートされる ODBC API 関数、および ODBC サポート レベルの一覧を示します。
表 20 インターフェイスがサポートしている ODBC API 関数
ODBC 関数 | ODBC サポート レベル |
SQLAllocHandle | コア |
SQLBindCol | コア |
SQLBindParameter | コア |
SQLBrowseConnect | レベル 1 |
SQLBulkOperations | レベル 1 |
SQLCancel | コア |
SQLCloseCursor | コア |
SQLColAttribute | コア |
SQLColumnPrivileges | レベル 2 |
SQLColumns | コア |
SQLConnect | コア |
SQLCopyDesc | コア |
SQLDataSources | コア |
SQLDescribeCol | コア |
SQLDescribeParam | レベル 2 |
SQLDisconnect | コア |
SQLDriverConnect | コア |
SQLDrivers | コア |
SQLEndTran | コア |
SQLExecDirect | コア |
SQLExecute | コア |
SQLExtendedFetch | コア |
SQLFetch | コア |
SQLFetchScroll | コア |
SQLForeignKeys | レベル 2 |
SQLFreeHandle | コア |
SQLFreeStmt | コア |
SQLGetConnectAttr | コア |
SQLGetCursorName | コア |
SQLGetData | コア |
SQLGetDescField | コア |
SQLGetDescRec | コア |
SQLGetDiagField | コア |
SQLGetDiagRec | コア |
SQLGetEnvAttr | コア |
SQLGetFunctions | コア |
SQLGetInfo | コア |
SQLGetStmtAttr | コア |
SQLGetTypeInfo | コア |
SQLMoreResults | レベル 1 |
SQLNativeSql | コア |
SQLNumParams | コア |
SQLNumResultCols | コア |
SQLParamData | コア |
SQLPrepare | コア |
SQLPrimaryKeys | レベル 1 |
SQLProcedureColumns | レベル 1 |
SQLProcedures | レベル 1 |
SQLPutData | コア |
SQLRowCount | コア |
SQLSetConnectAttr | コア |
SQLSetCursorName | コア |
SQLSetDescField | コア |
SQLSetDescRec | コア |
SQLSetEnvAttr | コア |
SQLSetPos | レベル 1 |
SQLSetStmtAttr | コア |
SQLStatistics | コア |
SQLTablePrivileges | レベル 2 |
SQLTables | コア |
ODBC API サポートの例外
次のセクションには、ODBC API サポートの例外に関する詳細が記述されています。
SQLGetTypeInfo
SQLGetTypeInfo を使用すると、リレーショナル インターフェイスによって指定されたネイティブ データ型名(
タイプ名)のリストが生成されます。たとえば、
SQL_CHAR が
CHARACTER に割り当てられます。CREATE TABLE ステートメントまたは
ALTER TABLE ステートメント内の列のデータ型名、あるいはプロシージャのパラメーターや、プロシージャおよびトリガーで宣言された変数のデータ型名には、この関数から戻される名前を使用してください。
サポートされている ODBC データ型の一覧については、
Pervasive PSQL データ型と対応する ODBC データ型を参照してください。
SQLSpecialColumns
リレーショナル インターフェイスでは、テーブル内の行を一意に識別する最適な列セットとして固有のインデックスが使用されます。新しい行が挿入されたとき、リレーショナル インターフェイスは IDENTITY 列の値は返しません。IDENTITY 列の値は @@IDENTITY 変数を使用することによって判断できます。
@@IDENTITY を参照してください。
SQLGetData
アプリケーションで SQLGetData を呼び出して SQL_C_NUMERIC 構造体にデータを返した場合、ODBC 標準では、SQL_DESC_SCALE フィールドはゼロに設定され、SQL_DESC_PRECISION フィールドにはドライバー定義の精度が使用されます。
Pervasive PSQL は、メタデータに定義されている小数位およびドライバー定義の精度(桁数)の値を使用します。次の例を考えて見ましょう。この例では、小数位は 2 に設定されます。
CREATE TABLE testnum (col1 NUMERIC(10,2))
INSERT INTO testnum VALUES (10.34)
SELECT * FROM testnum
SELECT ステートメントは 10.00 ではなく 10.34 を返します。
SQLGetInfo
リレーショナル インターフェイスは、SQL_DRIVER_VER と SQL_DBMS_VER で同一の値を返します。このバージョン値は次の形式で返されます。
aa.bb.cccc ddd
この値は、次の表で説明されているように 4 つの構成要素として解釈できます。
要素 | 値 | 説明 |
aa | メジャー バージョン | Pervasive PSQL データベース エンジンのメジャー バージョン。 |
bb | マイナー バージョン | Pervasive PSQL データベース エンジンのマイナー バージョン。一般に、サービス パックで更新されます。 |
cccc | ビルド番号 | ビルドの詳細。Pervasive Software がリリース版を生成した時点のビルド回数を示すことによって、そのリリースを特定します。 |
ddd | ポイント ビルド | ビルドのマイナー アップデート。ビルド番号とポイント ビルドによって、特定の時点で作成された一意な製品リリースを識別できます。 |
次の表では、SQLGetInfo で一般的に返されるその他の値についてまとめています。値は例としてのみ挙げてあります。
項目 | 値の例 |
SQL_DRIVER_NAME | W3ODBCCI.DLL |
SQL_DRIVER_VER | 10.00.0147 012 |
SQL_DRIVER_ODBC_VER | 03.51 |
SQL_DBMS_NAME | Pervasive.SQL |
SQL_DBMS_VER | 10.00.0147 012 |
SQL_ODBC_VER | 03.52.0000 |
SQL_ODBC_API_CONFORMANCE | SQL_OAC_LEVEL2 |
SQL_ODBC_INTERFACE_CONFORMANCE | SQL_OIC_LEVEL2 |
ODBC 属性サポート
リレーショナル インターフェイスは ODBC v3.51 の属性サポートを提供していますが、次の例外があります。
ODBC 属性サポートの例外
ステートメント属性のサポート
次の表は、ODBC ステートメント属性サポートの例外を示します。
表 21 ODBC ステートメント属性サポートの例外
fOption(数値) | 解説 |
SQL_ATTR_QUERY_TIMEOUT(0) | SQLSetStmtAttr および SQLSetConnectAttr を介してサポートされます。SQLExecDirect、SQLExecute、SQLFetch および SQLExtendedFetch にのみ適用できます。DDL ステートメントに適用してはいけません。 |
SQL_ATTR_METADATA_ID(10014) | デフォルト値は SQL_FALSE です。Pervasive ODBC ドライバーは、この属性値を SQL_TRUE に設定することを許可していません。 |
SQL_ATTR_ENABLE_AUTO_IPD(15) | デフォルト値は SQL_TRUE です。Pervasive ODBC ドライバーは、この属性値を SQL_FALSE に設定することを許可していません。 |
SQL_ATTR_PARAM_BIND_TYPE(18) | SQL_PARAM_BIND_BY_COLUMN のみサポートされます。 |
接続属性サポート
次の表は、ODBC 接続属性サポートの例外を示します。
表 22 ODBC 接続属性サポートの例外
fOption | 解説 |
SQL_ATTR_AUTO_IPD | デフォルト値は SQL_TRUE です。Pervasive ODBC ドライバーは、この属性値を SQL_FALSE に設定することを許可していません。 |
SQL_ATTR_METADATA_ID | デフォルト値は SQL_FALSE です。Pervasive ODBC ドライバーは、この属性値を SQL_TRUE に設定することを許可していません。 |
SQL_ATTR_CONNECTION_TIMEOUT | デフォルト値は 0 です。それ以外の値はサポートされていません。 |
ODBC 記述子フィールドのサポート
リレーショナル インターフェイスは ODBC v3.51 の記述子フィールド サポートを提供していますが、次の例外があります。
ODBC 記述子サポートの例外
次の表は、ODBC 記述子フィールド サポートの例外を示します。
表 23 ODBC 記述子サポートの例外
fOption | 解説 |
SQL_DESC_BIND_TYPE | アプリケーション パラメーター記述子(APD)では、SQL_BIND_BY_COLUMN のみサポートされます。 |
SQL_DESC_ROWVER | |
記述子フィールドおよびビット数値
一部の記述子フィールドは ODBC のさまざまな SQLSet および SQLGet 関数を介して設定できますが、これらの関数が 64 ビット値対応に変更されている一方、それ以外の関数はまだ 32 ビット値対応であることに注意してください。64 ビット ODBC ドライバーを使用している場合、このようなフィールドを設定および取得する際には、適切なサイズの変数を使用するようにしてください。詳細については、Microsoft の ODBC ドキュメントを参照してください。
特に http://msdn.microsoft.com/en-us/library/ms716287%28VS.85%29.aspx(英語)をご覧ください。
説明の要点は、SQL_ROWSET_SIZE は SQLGetStmtOption と SQLGetStmtAttr の両方でサポートされるということです。64 ビット ODBC ドライバーを使用し、SQLGetStmtOption または SQLGetStmtAttr を呼び出した場合、属性パラメーターが SQL_ROWSET_SIZE に設定されている場合には、*ValuePtr に 64 ビット値が返されます。
SQLSetStmtOption の各種オプション
このセクションでは、以下の SQLSetStmtOption の各種オプションに対する Pervasive PSQL のサポートについて説明します。
•SQL_BIND_TYPE
•SQL_CONCURRENCY
•SQL_CURSOR_TYPE
•SQL_RETRIEVE_DATA
•SQL_ROWSET_SIZE
•SQL_USE_BOOKMARKS
次の表は、各オプションで有効な設定値を示します。
表 24 アクセス方法ごとにサポートされるバインド、並行、およびカーソルのタイプ
| ODBC カーソル ライブラリ | 現在の Pervasive PSQL ODBC ドライバー |
SQL_BIND_TYPE | SQL_BIND_BY_COLUMN または行方向のバインドを示す長さ | SQL_BIND_BY_COLUMN または行方向のバインドを示す長さ |
SQL_CONCURRENCY | SQL_CONCUR_READ_ONLY または SQL_CONCUR_ VALUES (SQL_CONCUR_ROWVER の場合、ライブラリは SQL_CONCUR_VALUES を代用し、SQL_SUCCESS_WITH_INFO を返して、SQLSTATE に 01S02 を設定する) (SQL_CONCUR_LOCK の場合、ライブラリは SQLSTATE = S1C00 の SQL_ERROR を返す) | SQL_CURSOR_FORWARD_ONLY または SQL_CURSOR_STATIC (SQL_CURSOR_KEYSET_DRIVEN および SQL_CURSOR_DYNAMIC の場合、ライブラリは SQL_CURSOR_STATIC を代用し、SQL_SUCCESS_WITH_INFO を返して、SQLSTATE に 01S02 を設定する) |
SQL_CURSOR_TYPE | SQL_CURSOR_FORWARD_ONLY または SQL_CURSOR_STATIC (SQL_CURSOR_KEYSET_DRIVEN および SQL_CURSOR_DYNAMIC の場合、ライブラリは SQL_CURSOR_STATIC を代用し、SQL_SUCCESS_WITH_INFO を返して、SQLSTATE に 01S02 を設定する) | SQL_CURSOR_FORWARD_ONLY または SQL_CURSOR_STATIC または SQL_CURSOR_DYNAMIC (SQL_CURSOR_KEYSET_DRIVEN の場合、ライブラリは SQL_CURSOR_STATIC を代用し、SQL_SUCCESS_WITH_INFO を返して、SQLSTATE に 01S02 を設定する) |
表 25 アクセス方法ごとにサポートされる行セットのサイズおよびブックマーク
| ODBC カーソル ライブラリ | 現在の Pervasive PSQL ODBC ドライバー |
SQL_RETRIEVE_DATA | SQL_RD_ON (SQL_RD_OFF の場合、ライブラリは SQLSTATE = S1C00 の SQL_ERROR を返す) | SQL_RD_ON または SQL_RD_OFF |
SQL_ROWSET_SIZE | 行セットの行数を示す値。これは最大行セット サイズを限度とします。 | 行セットの行数を示す値。これは最大行セット サイズを限度とします。 |
SQL_USE_BOOKMARKS | SQL_UB_ON または SQL_UB_OFF | SQL_UB_ON または SQL_UB_OFF |
SQL 文法のサポート
ODBC v 2.5 仕様は、最小、コア、拡張の 3 つの SQL 文法レベルを提供します。レベルが高くなるほど、より完全なデータ定義の実装とデータ操作言語のサポートが提供されます。リレーショナル インターフェイスでは、最小 SQL 文法に加え、多数のコアおよび拡張のステートメント文法を完全サポートしています。リレーショナル インターフェイスがサポートしている SQL 文法は、次の表に要約されています。
表 26 SQL 文法のサポート
SQL ステートメント文法 | 最小 | コア | 拡張 |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
DELETE(位置付け) | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
- 拡張述部 | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
UPDATE(位置付け) | | | |
| | | |
SQL ステートメント内のデリミター付き識別子
列名およびテーブル名に非 ODBC 標準文字が含まれる場合、列名とテーブル名はデリミター付き識別子として表記できます。識別子がキーワードである場合は、デリミターを付ける必要があります。
識別子のデリミター文字は二重引用符です。
例
SELECT "姓" FROM "非標準テーブル"
ハイフンは ODBC 標準文字ではありません。
SELECT "password" FROM my_pword_tbl
"Password" は SET PASSWORD ステートメントのキーワードです。