PSQL ODBC リファレンス
接続文字列、メタデータのバージョン、制限、および SQL 文法についてのリファレンス情報
この章では、リレーショナル インターフェイスおよび ODBC について説明します。
データ ソース名接続文字列キーワード
DSN への接続に使用される接続文字列には、ドライバーの定義済みキーワードをいくつでも含むことができます。これらのキーワードを使用することにより、ドライバーはデータ ソースへ接続するのに十分な情報を得ることができます。ドライバーは、データ ソースとの接続に必要なキーワードを定義します。
PSQL の接続文字列およびキーワードの完全な説明については、
ODBC 接続文字列を参照してください。
開いたテーブルを閉じる
SQLFreeStmt に SQL_CLOSE オプションを指定して呼び出すと、SQLState は変更されますが、hStmt が使用している開いたテーブルは閉じません。hStmt が現在使用しているテーブルを閉じるには、SQLFreeStmt に SQL_DROP オプションを指定して呼び出す必要があります。
次の例では、Emp と Dept のテーブルは開いたままになります。
SQLPrepare(hStmt, "SELECT * FROM Emp, Dept", SQL_NTS)
SQLExecute(hStmt)
SQLFetch until SQL_No_Data_Found
SQLFreeStmt(hStmt, SQL_CLOSE)
その次に SQLPrepare が hStmt で呼び出されたとき、前のステートメントで使用したテーブルが閉じられます。たとえば、次の呼び出しを実行すると、Emp と Dept の両方のテーブルは PSQL によって閉じられます。
SQLPrepare(hStmt, "SELECT * FROM Customer", SQL_NTS)
その後、次の呼び出しによって Customer テーブルを閉じます。
SQLFreeStmt(hStmt, SQL_DROP)
SQL 文法のサポート
ODBC v 2.5 仕様は、最小、コア、拡張の 3 つの SQL 文法レベルを提供します。レベルが高くなるほど、より完全なデータ定義の実装とデータ操作言語のサポートが提供されます。
リレーショナル インターフェイスでは、最小 SQL 文法に加え、多数のコアおよび拡張のステートメント文法を完全サポートしています。リレーショナル インターフェイスがサポートしている SQL 文法は、次の表に要約されています。ステートメント文法は、『SQL Engine Reference』に記載されています。
表 7 SQL 文法のサポート
SQL ステートメント文法 | 最小 | コア | 拡張 |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
DELETE(検索済み) | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
拡張述部 | | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
SQL ステートメント内のデリミター付き識別子
列名およびテーブル名に非標準文字が含まれる場合、列名とテーブル名はデリミター付き識別子として表記できます。識別子がキーワードである場合は、デリミターを付ける必要があります。
識別子のデリミター文字は二重引用符です。
例
SELECT "姓" FROM "非標準テーブル"
ハイフンは標準文字ではありません。
SELECT "password" FROM my_pword_tbl
"Password" は SET PASSWORD ステートメントのキーワードです。
使用できるデータ型
次の表は、PSQL によってサポートされるリレーショナル データ型に関する情報を示します。SRDE は、SQLGetData または SQLBindCol を呼び出すときに別のデータ型変換が指定されない限り、リレーショナル データ型を ODBC のデフォルトのデータ型に変換します(データ型の変換については、Microsoft の ODBC ドキュメントに記載されているデータ型を参照してください)。
以下のデータ型に関する詳しい情報は、『
SQL Engine Reference』の
PSQL トランザクショナルおよびリレーショナル データ型を参照してください。
•PSQL メタデータの型コード
•サイズ
•作成/追加パラメーター
•各データ型固有の注記
表 8 PSQL で使用できる ODBC のデータ型
リレーショナル型 | ODBC 型(コード) 1 |
BFLOAT4 | SQL_REAL(7) |
BFLOAT8 | SQL_DOUBLE(8) |
BIGINT | SQL_DECIMAL(3) |
BINARY | SQL_BINARY(-2) |
BIT | SQL_BIT(-7) |
CHAR | SQL_CHAR(1) |
CURRENCY | SQL_DECIMAL(3) |
DATE | SQL_DATE(9) |
DATETIME | SQL_TIMESTAMP(11) |
DECIMAL | SQL_DECIMAL(3) |
DOUBLE | SQL_DOUBLE(8) |
IDENTITY | SQL_INTEGER(4) |
INTEGER | SQL_INTEGER(4) |
LONGVARBINARY | SQL_LONGVARBINARY(-4) |
LONGVARCHAR | SQL_LONGVARCHAR(-1) |
NCHAR | SQL_WCHAR(-8) |
NLONGVARCHAR | SQL_WLONGVARCHAR(-10) |
NUMERIC | SQL_NUMERIC(2) |
NUMERICSA | SQL_NUMERIC(2) |
NUMERICSLB | SQL_NUMERIC(2) |
NUMERICSLS | SQL_NUMERIC(2) |
NUMERICSTB | SQL_NUMERIC(2) |
NUMERICSTS | SQL_NUMERIC(2) |
NVARCHAR | SQL_WVARCHAR(-9) |
REAL | SQL_REAL(7) |
SMALLIDENTITY | SQL_SMALLINT(5) |
SMALLINT | SQL_SMALLINT(5) |
TIME | SQL_TIME(10) |
TIMESTAMP | SQL_TIMESTAMP(11) |
TINYINT | SQL_TINYINT(-6) |
UBIGINT | SQL_DECIMAL(3) |
UINTEGER | SQL_INTEGER(4) |
UNIQUEIDENTIFIER | SQL_GUID(-11) |
USMALLINT | SQL_SMALLINT(5) |
UTINYINT | SQL_TINYINT(-6) |
VARCHAR | SQL_VARCHAR(12) |
1 SQL_FLOAT および SQL_VARBINARY は PSQL ではサポートされません。 |
無限の表現
PSQL で無限を表すには、次の表のように、4 バイト(C 言語の float 型)または 8 バイト(C 言語の double 型)の形式で、16 進数または文字として表現できます。
表 9 無限の表現
値 | Float 16 進数 | Float 文字 | Double 16 進数 | Double 文字 |
正の最大数 | | | 0x7FEFFFFFFFFFFFFF | |
負の最大数 | | | 0xFFEFFFFFFFFFFFFF | |
正の無限数 | 0x7F800000 | 1E999 | 0x7FF0000000000000 | 1E999 |
負の無限数 | 0xFF800000 | -1E999 | 0xFFF0000000000000 | -1E999 |
トランザクション
START TRANSACTION ステートメントはストアド プロシージャ外ではサポートされません。これは、ODBC 標準が、すべてのステートメントはデフォルトでトランザクション内にあることを条件としているためです。ODBC 標準にはトランザクションを開始する API がありません。『
SQL Engine Reference』の
START TRANSACTION を参照してください。
ODBC は、各 SQL ステートメントを SQL 独自のトランザクション内に置くか、それともアプリケーションが各トランザクションの終了時を指定するかどうかを決定するアプリケーションを提供します。ODBC は、トランザクション内にないどのステートメントより前に、自動的にトランザクションを開きます。したがって、指定された接続の最初のステートメント、あるいは COMMIT または ROLLBACK 後の最初のステートメントにより、ODBC は自動的に新しいトランザクションを開始します。
ODBC 標準内では、SQLSetConnectOption を使って、各ステートメントを独自のトランザクション内に置くか、またはアプリケーションが複数のステートメントを 1 つのトランザクションにまとめるかどうかを指定します。
SQLSetConnectOption にオプション SQL_AUTOCOMMIT、値 SQL_AUTOCOMMIT_ON(これがデフォルトです)を指定して呼び出すと、各ステートメントは独自のトランザクション内に置かれます。このように使用すると、トランザクションはステートメントの実行を開始するときに開始され、ステートメントの実行の完了時点でエラーが発生していない場合は自動的にコミットされ、エラーが発生した場合はロール バックされるようになります。
SQLSetConnectOption にオプション SQL_AUTOCOMMIT、値 SQL_AUTOCOMMIT_OFF を指定して呼び出すと、アプリケーションがステートメントを 1 つのトランザクションにまとめることができます。このように使用すると、トランザクションは実行される最初のステートメントを開始するときに開始されます。その後、トランザクションをいつ、どのように終了するかは、アプリケーションが SQLTransact を呼び出すか、'COMMIT WORK' または 'ROLLBACK WORK' ステートメントを実行するかによって決まります。アプリケーションが 1 つのトランザクションを終了すると、次のステートメントの実行時に別のトランザクションが自動的に開始されます。