SQL Engine Reference (v11)

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

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

表 125 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 に知らせるフラグ セット
3. バイナリ ゼロで埋められます
4. 変数としても、またストアド プロシージャ内でも使用できません
5. 埋められません
6. インデックスを作成できません
7. トランザクショナルのみ
8. TRUEBITCREATE は "on"(デフォルト)に設定する必要があります
9. TRUEBITCREATE は "off" に設定する必要があります
10. 型コード 30 はトランザクショナル インターフェイスの型コードではありません。リレーショナル インターフェイス メタデータ内における DATETIME の識別子です。

データ型の範囲

次の表は、Pervasive PSQL データ型で有効な値の範囲を示したものです。

表 126 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 になります。

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

表 127 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 という値を挿入することがあります。


データ型

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