SQL Engine Reference (v11)

Pervasive PSQL で使用できるデータ型

次の表は、Pervasive PSQL によってサポートされるトランザクショナルおよびリレーショナル データ型に関する情報を示します。SRDE は、SQLGetData または SQLBindCol を呼び出すときに別のデータ型変換が指定されない限り、リレーショナル データ型を ODBC のデフォルトのデータ型に変換します(データ型の変換については、『Microsoft ODBC Programmer's Reference』の「付録 データ型」を参照してください)。

表 126 Pervasive PSQL データ型と対応する ODBC データ型
トランザクショナル型(サイズ)
リレーショナル型
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 データ型で有効な値の範囲を示したものです。

表 127 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 が最低です。

  1. +(正)、-(負、否定)、~(ビット演算 NOT)
  2. *(乗算)、/(除算)、%(剰余)
  3. +(加算)、(+ 連結)、-(減算)、&(ビット演算 AND)
  4. =、>、<、>=、<=、<>、!=(これらの比較演算子は、それぞれ、等しい、より大きい、より小さい、以上、以下、等しくない、を表します。)
  5. ^(ビット演算 排他的 OR)、|(ビット演算 OR)
  6. NOT
  7. AND
  8. ALL、ANY、BETWEEN、IN、LIKE、OR、SOME
  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 に評価される結果となります。

SET :Counter = 100 / (40 - (2 * (5 + 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 データ型は優先順位を持ちません。これらのデータ型を組み合わせる演算は許可されていません。

Decimal データ型の精度と小数点以下桁数

精度は、数値内の数字の数(桁数)です。小数位は、数値内の小数点より右側の数字の数です。たとえば、909.777 という数では精度が 6 で小数位が 3 となります。

NUMERIC、NUMERICSA および DECIMAL データ型のデフォルトの最大精度は 64 です。NUMERICSTS および NUMERICSLS では、プラスまたはマイナス符号のために 1 バイトが予約されているため、デフォルトの最大精度は 63 です。

DECIMAL を除くすべての数値データ型で、精度と小数位は固定です。同じデータ型の 2 つの式で算術演算を行った場合、結果は同じデータ型となり、そのデータ型の精度と小数位を持ちます。データ型が異なる式で演算を行った場合は、優先順位のルールによって結果のデータ型が決定されます。結果の精度と小数位は、そのデータ型に定義されている桁数になります。

次の条件の場合、結果は DECIMAL になります。

128 は、演算結果のデータ型が DECIMAL になる場合に精度と小数位を導き出す方法の定義を示しています。"exp" は「式」を表し、"s" は「小数位」、"p" は「精度」を表します。

表 128 DECIMAL 演算の精度と小数位の計算方法
演算
精度
小数位
Addition (exp1 + exp2)
max(s1, s2) + max(p1 - s1, p2 - s2) +1
max(s1, s2)
Subtraction (exp1 - exp2)
max(s1, s2) + max(p1 - s1, p2 - s2) +1
max(s1, s2)
Multiplication (exp1 * exp2)
p1 + p2 + 1
s1 + s2
Division (exp1 / exp2)
p1 - s1 + s2 + max(6, s1 + p2 +1)
max(6, s1 + p2 +1)
UNION (exp1 UNION exp2)
max(s1, s2) + max(p1 - s1, p2 - s2) +1
max(s1, s2)

たとえば、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 という値を挿入することがあります。


データ型

データ型に関する注意事項