|
次の表は、Pervasive PSQL によってサポートされるトランザクショナルおよびリレーショナル データ型に関する情報を示します。SRDE は、SQLGetData または SQLBindCol を呼び出すときに別のデータ型変換が指定されない限り、リレーショナル データ型を ODBC のデフォルトのデータ型に変換します(データ型の変換については、『Microsoft ODBC Programmer's Reference』の「付録 データ型」を参照してください)。
トランザクショナル型(サイズ)
|
リレーショナル型
|
ODBC 型(コード) 1
|
型コード2
|
サイズ(バイト数)
|
作成/追加パラメーター4
|
注記
|
---|---|---|---|---|---|---|
AUTOINC(2)
|
SMALLIDENTITY
|
SQL_SMALLINT(5)
|
15
|
2
|
|
|
AUTOINC(4)
|
IDENTITY
|
SQL_INTEGER(4)
|
15
|
4
|
|
|
BFLOAT(4)
|
BFLOAT4
|
SQL_REAL(7)
|
9
|
4
|
ヌルでない
|
4
|
BFLOAT(8)
|
BFLOAT8
|
SQL_DOUBLE(8)
|
9
|
8
|
ヌルでない
|
4
|
BLOB
|
LONGVARBINARY
|
SQL_LONGVARBINARY
(-4) |
21
|
N/A3
|
ヌルでない
|
2, 3, 6
|
CLOB
|
LONGVARCHAR
|
SQL_LONGVARCHAR
(-1) |
21
|
N/A3
|
ヌルでない
大小文字無視 |
5, 6
|
CURRENCY
|
CURRENCY
|
SQL_DECIMAL(3)
|
19
|
8
|
ヌルでない
|
|
DATE
|
DATE
|
SQL_DATE(9)
|
3
|
4
|
ヌルでない
|
|
なし
|
DATETIME
|
SQL_TIMESTAMP(11)
|
30
|
8
|
ヌルでない
|
10
|
DECIMAL
|
DECIMAL
|
SQL_DECIMAL(3)
|
5
|
1 - 64
|
桁数
小数位 ヌルでない |
|
FLOAT (4)
|
REAL
|
SQL_REAL(7)
|
2
|
4
|
ヌルでない
|
|
FLOAT (8)
|
DOUBLE
|
SQL_DOUBLE(8)
|
2
|
8
|
ヌルでない
|
|
GUID
|
UNIQUEIDENTIFIER
|
SQL_GUID(-11)
|
27
|
16
|
ヌルでない
|
|
INTEGER(1)
|
TINYINT
|
SQL_TINYINT(-6)
|
1
|
1
|
ヌルでない
|
|
INTEGER(2)
|
SMALLINT
|
SQL_SMALLINT(5)
|
1
|
2
|
ヌルでない
|
|
INTEGER(4)
|
INTEGER
|
SQL_INTEGER(4)
|
1
|
4
|
ヌルでない
|
|
INTEGER(8)
|
BIGINT
|
SQL_DECIMAL(3)
|
1
|
8
|
ヌルでない
|
|
MONEY
|
DECIMAL
|
SQL_DECIMAL(3)
|
6
|
1 - 64
|
桁数
小数位 ヌルでない |
|
NUMERIC
|
NUMERIC
|
SQL_NUMERIC(2)
|
8
|
1 - 37
|
桁数
小数位 ヌルでない |
4
|
NUMERICSA
|
NUMERICSA
|
SQL_NUMERIC(2)
|
18
|
1 - 37
|
桁数
小数位 ヌルでない |
4
|
NUMERICSLB
|
NUMERICSLB
|
SQL_NUMERIC(2)
|
28
|
1 - 37
|
桁数
小数位 ヌルでない |
4
|
NUMERICSLS
|
NUMERICSLS
|
SQL_NUMERIC(2)
|
29
|
1 - 37
|
桁数
小数位 ヌルでない |
4
|
NUMERICSTB
|
NUMERICSTB
|
SQL_NUMERIC(2)
|
31
|
1 - 37
|
桁数
小数位 ヌルでない |
4
|
NUMERICSTS
|
NUMERICSTS
|
SQL_NUMERIC(2)
|
17
|
1 - 37
|
桁数
小数位 ヌルでない |
4
|
STRING
|
BINARY
|
SQL_BINARY(-2)
|
0
|
1- 8,000
|
サイズ
ヌルでない 大小文字無視 |
2, 3
|
STRING
|
CHAR
|
SQL_CHAR(1)
|
0
|
1- 8,000
|
サイズ
ヌルでない 大小文字無視 |
1
|
TIME
|
TIME
|
SQL_TIME(10)
|
4
|
4
|
ヌルでない
|
|
TIMESTAMP
|
TIMESTAMP
|
SQL_TIMESTAMP(11)
|
20
|
8
|
ヌルでない
|
|
UNSIGNED(1) BINARY
|
UTINYINT
|
SQL_TINYINT(-6)
|
14
|
1
|
ヌルでない
|
|
UNSIGNED(2) BINARY
|
USMALLINT
|
SQL_SMALLINT(5)
|
14
|
2
|
ヌルでない
|
|
UNSIGNED(4) BINARY
|
UINTEGER
|
SQL_INTEGER(4)
|
14
|
4
|
ヌルでない
|
|
UNSIGNED(8) BINARY
|
UBIGINT
|
SQL_DECIMAL(3)
|
14
|
8
|
ヌルでない
|
|
WSTRING
|
SQL でのサポートなし
|
SQL でのサポートなし
|
25
|
N/A3
|
|
7
|
WZSTRING
|
SQL でのサポートなし
|
SQL でのサポートなし
|
26
|
N/A3
|
|
7
|
ZSTRING
|
VARCHAR
|
SQL_VARCHAR(12)
|
11
|
1- 8,000
|
サイズ
ヌルでない 大小文字無視 |
5
|
なし
|
BIT
|
SQL_BIT(-7)
|
16
|
1 ビット
|
|
6, 8
|
LOGICAL(1)
|
BIT
|
SQL_BIT(-7)
|
7
|
1 ビット
|
|
9
|
LOGICAL(2)
|
SMALLINT
|
SQL_SMALLINT(5)
|
1
|
2
|
ヌルでない
|
|
1 SQL_FLOAT および SQL_VARBINARY は Pervasive PSQL ではサポートされません。
2 Pervasive PSQL メタデータの型コード
3 "N/A" は "not applicable"(適用外)を表します。
4 必須パラメーターは「桁数」と「サイズ」です。「大小文字無視」、「ヌルでない」、および「小数位」はオプション パラメーターです。
メモ:
1. 空白で埋められます
2. FIELD.DDF で、バイナリの使用を SQL に知らせるフラグ セット。『Distributed Tuning Interface Guide』の 「COLUMNMAP フラグ」および『Distributed Tuning Objects Guide』の列フラグを参照してください。
3. バイナリ ゼロで埋められます
4. 変数としても、またストアド プロシージャ内でも使用できません
5. 埋められません
6. インデックスを作成できません
7. トランザクショナルのみ
8. TRUEBITCREATE は "on"(デフォルト)に設定する必要があります
9. TRUEBITCREATE は "off" に設定する必要があります
10. 型コード 30 はトランザクショナル インターフェイスの型コードではありません。リレーショナル インターフェイス メタデータ内における DATETIME の識別子です。
|
次の表は、Pervasive PSQL データ型で有効な値の範囲を示したものです。
リレーショナル データ型
|
有効値の範囲
|
---|---|
BFLOAT4
|
-1.70141172e+38 ~ +1.70141173e+38
BFLOAT4 をインクリメントまたはデクリメントできる最小値は 2.938736e-39 です。
|
BFLOAT8
|
-1.70141173e+38 ~ +1.70141173e+38
BFLOAT8 をインクリメントまたはデクリメントできる最小値は 2.93873588e-39 です。
|
BIGINT
|
-9223372036854775808 ~ +9223372036854775807
|
BINARY
|
範囲は適用されません
|
BIT
|
範囲は適用されません
|
CURRENCY
|
-922337203685477.5808 ~ +922337203685477.5807
|
DATE
|
01-01-0001 ~ 12-31-9999
メモ:00-00-0000 は DATE に入力する有効な値ではありません。日付型 データに 00-00-0000 データを含むレガシー データがある場合は、クエリに "is null" を指定することによって調べることができます。
|
DATETIME
|
1753 年 1 月 1 日から 9999 年 12 月 31 日、1/1000 秒の精度
|
DECIMAL
|
長さと小数点以下の桁数によって異なります。
|
DOUBLE
|
-1.7976931348623157e+308 ~ +1.7976931348623157e+308
DOUBLE をインクリメントまたはデクリメントできる最小値は 2.2250738585072014e-308 です。
|
FLOAT
|
-1.7976931348623157E+308 ~ +1.7976931348623157E+308
FLOAT をインクリメントまたはデクリメントできる最小値は 2.2250738585072014e-308 です。
|
IDENTITY
|
+1 ~ +2147483647
|
INTEGER
|
-2147483648 ~ +2147483647
|
LOGICAL
|
範囲は適用されません
|
LONGVARBINARY
|
範囲は適用されません
|
LONGVARCHAR
|
範囲は適用されません
|
MONEY
|
-99999999999999999.99 ~ +99999999999999999.99
|
NUMERIC
|
長さと小数点以下の桁数によって異なります。Decimal データ型の精度と小数点以下桁数を参照してください。
|
NUMERICSA
|
長さと小数点以下の桁数によって異なります。Decimal データ型の精度と小数点以下桁数を参照してください。
|
NUMERICSLB
|
長さと小数点以下の桁数によって異なります。Decimal データ型の精度と小数点以下桁数を参照してください。
|
NUMERICSLS
|
長さと小数点以下の桁数によって異なります。Decimal データ型の精度と小数点以下桁数を参照してください。
|
NUMERICSTB
|
長さと小数点以下の桁数によって異なります。Decimal データ型の精度と小数点以下桁数を参照してください。
|
NUMERICSTS
|
長さと小数点以下の桁数によって異なります。Decimal データ型の精度と小数点以下桁数を参照してください。
|
REAL
|
-3.4028234E+38 ~ +3.4028234e+38
REAL をインクリメントまたはデクリメントできる最小値は 1.4E-45 です。
|
SMALLIDENTITY
|
+1 ~ +32767
|
SMALLINT
|
-32768 ~ +32767
|
STRING
|
範囲は適用されません
|
TIME
|
00:00:00 ~ 23:59:59
|
TIMESTAMP
|
0001-01-01 00:00:00.0000000 - 9999-12-31 23:59:59.9999999 UTC
|
TINYINT
|
-128 ~ +127
|
UBIGINT
|
0 ~ 18446744073709551615
|
UINTEGER
|
0 ~ 4294967295
|
UNIQUEIDENTIFIER
|
範囲は適用されません
|
USMALLINT
|
0 ~ 65535
|
UTINYINT
|
0 ~ 255
|
VARCHAR
|
範囲は適用されません
|
式には複数の演算子が含まれることがあります。演算子の優先順位によって、演算を実行する順序が決定します。Pervasive PSQL は次に示す優先レベルを使用します。高レベルの演算子は低レベルの演算子より先に評価されます。レベル 1 が最高で、レベル 9 が最低です。
式に同じ優先レベルの演算子が 2 つある場合は、それらが式に現れる位置を基に、左から右へ評価されます。
たとえば、次のプロシージャ内の SET ステートメントでは、除算演算子は乗算演算子より先に評価されます。プロシージャは 21 を返します。
CREATE PROCEDURE checkvalue(); BEGIN DECLARE :Counter INTEGER; SET :Counter = 12 / 4 * 7; PRINT :Counter; END CALL checkvalue
かっこを使用すると、定義されている演算子の優先順位より優先させることができます。最初にかっこ内のものがすべて評価され、1 つの値がもたらされます。そうしたら、この値をかっこの外にある演算子で使用することができます。
たとえば、次のプロシージャ内の SET ステートメントで、除算演算子は通常は加算演算子より先に評価されます。結果は 12 になります(つまり、8 + 4)。しかし、加算はかっこで囲まれているため最初に実行されるので、プロシージャは結果の 4 を返します。
CREATE PROCEDURE checkvalue1(); BEGIN DECLARE :Counter INTEGER; SET :Counter = 32 / (4 + 4); PRINT :Counter; END CALL checkvalue1
式にネストされたかっこがある場合は、一番深くネストされている式が最初に評価され、次に深くネストされている式の順に評価されます。
たとえば、次の SET ステートメントでは、加算が最初に実行され(一番深いネスト)、次に乗算、減算、最後に除算が実行されます。変数は 5 に評価される結果となります。
データ型の優先順位は、異なるデータ型の 2 つの式が演算子によって結合されている場合にどのデータ型で結果を出すかを決定します。優先順位の低いデータ型が優先順位の高いデータ型に変換されます。
メモ
互換性のないデータ型で演算を実行すると、Pervasive PSQL からエラーが返されます。たとえば、INTEGER を CHAR に加算しようとした場合などです。
Pervasive PSQL はリレーショナルの数値データ型に対して、次の優先順位をサポートしています。
リレーショナルの文字データ型に対する優先順位は以下のとおりです。
CHAR または VARCHAR と LONGVARCHAR を連結させた場合、結果は LONGVARCHAR になります。
CHAR と VARCHAR を連結させた場合、結果のデータ型はその連結で最初にくるデータ型になります(左から右へ)。たとえば、c1 が CHAR で c2 が VARCHAR の場合、(c1 + c2)の結果は CHAR になり、(c2 + c1)の結果は VARCHAR になります。
時刻および日付データ型に対する優先順位は以下のとおりです。
BINARY、LONGVARBINARY および UNIQUEIDENTIFIER データ型は優先順位を持ちません。これらのデータ型を組み合わせる演算は許可されていません。
精度は、数値内の数字の数(桁数)です。小数位は、数値内の小数点より右側の数字の数です。たとえば、909.777 という数では精度が 6 で小数位が 3 となります。
NUMERIC、NUMERICSA および DECIMAL データ型のデフォルトの最大精度は 64 です。NUMERICSTS および NUMERICSLS では、プラスまたはマイナス符号のために 1 バイトが予約されているため、デフォルトの最大精度は 63 です。
DECIMAL を除くすべての数値データ型で、精度と小数位は固定です。同じデータ型の 2 つの式で算術演算を行った場合、結果は同じデータ型となり、そのデータ型の精度と小数位を持ちます。データ型が異なる式で演算を行った場合は、優先順位のルールによって結果のデータ型が決定されます。結果の精度と小数位は、そのデータ型に定義されている桁数になります。
次の条件の場合、結果は DECIMAL になります。
表 128 は、演算結果のデータ型が DECIMAL になる場合に精度と小数位を導き出す方法の定義を示しています。"exp" は「式」を表し、"s" は「小数位」、"p" は「精度」を表します。
たとえば、DECIMAL(8,2)および DECIMAL(7,4)と定義されている 2 つのフィールドを加算または減算した場合、結果フィールドは DECIMAL(11,4)になります。
アプリケーションが異なる SQL DBMS 製品に対して実行される場合は、切り捨てに関する以下の問題が発生する可能性があります。
特定の状況で、SQL DBMS 製品によっては切り捨てのためにデータの挿入ができないのに、Pervasive PSQL ではその同じデータを挿入できることがあります。さらに、Pervasive PSQL の SQL_SUCCESS_WITH_INFO のレポートとその切り捨てられる情報は、メッセージがいつ報告されるのかという状況によって、いくつかの SQL DBMS 製品とは異なります。
数値文字列データおよび数値データは Pervasive PSQL によって常に切り捨てられます。SQL DBMS によっては、これらのデータは丸められます。したがって、数値文字列または数値の 123.457 があり、これを 6 バイトの文字列の列または小数部 2 桁の数値列に挿入する場合、Pervasive PSQL は常に 123.45 を挿入します。ほかの DBMS 製品は、これに対して 123.46 という値を挿入することがあります。
|