プライマリ・コンテンツに移動
Oracle® Database Oracleプリコンパイラのためのプログラマーズ・ガイド
12c リリース1 (12.1)
B71398-03
目次へ移動
目次
索引へ移動
索引

前
次

Oracleデータ型

Oracleでは、内部データ型外部データ型という2種類のデータ型が認識されます。内部データ型は、Oracleでデータベース列にデータを格納する方法を指定します。Oracleでは、データベース擬似列を表す内部データ型も使用されます。外部データ型は、データがホスト変数にどのように格納されるかを指定します。

プリコンパイル時に、宣言部の各ホスト変数は、外部データ型コードに関連付けられます。SQL文で使用するすべてのホスト変数のデータ型コードは、実行時にOracleに渡されます。Oracleは、コードを使用して内部データ型と外部データ型の間で変換します。

注意:

動的SQL方法4またはデータ型の同値化を使用すると、デフォルトのデータ型変換をオーバーライドできます。動的SQLの方法4の詳細は、方法4の使用方法を参照してください。データ型の同値化の詳細は、データ型の同値化を参照してください。

内部データ型

表3-1は、Oracleでデータベースの列および擬似列に使用される内部データ型の一覧です。

表3-1 列および擬似列のデータ型

名前 コード 説明

CHAR

96

固定長文字列(255バイト以下)

DATE

12

7バイト、固定長日付/時刻値

LONG

8

可変長文字列(2147483647バイト以下)

LONG RAW

24

可変長バイナリ・データ(2147483647バイト以下)

MLSLABEL

105

可変長バイナリ・ラベル(5バイト以下)

NUMBER

2

固定数または浮動小数点数

RAW

23

可変長バイナリ・データ(255バイト以下)

ROWID

11

固定長バイナリ値

VARCHAR2

1

可変長文字列(2000バイト以下)

これらの内部データ型は、ホスト言語のデータ型とは大きく異なる場合があります。たとえば、NUMBERデータ型は、移植性、精度(四捨五入のエラーなし)および正しい照合のために設計されました。これに相当するデータ型を持つホスト言語はありません。

次に内部データ型について簡単に説明します。詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

CHAR

CHARデータ型は、固定長の文字データの格納に使用します。データが内部でどのように表されるかは、データベースのキャラクタ・セットによって決まります。CHARデータ型には、255バイトまでの最大幅を指定できるオプションのパラメータがあります。構文は次のとおりです。

CHAR[(maximum_width)]

最大幅の指定には、定数または変数は使用できません。整数リテラルを使用する必要があります。最大幅を指定しない場合、デフォルトで1になります。CHAR(n)列の最大幅は、文字単位ではなくバイト単位で指定することを思い出してください。そのため、CHAR(n)列にマルチバイト(2バイト)文字が格納される場合、その最大幅はn/2文字未満になります。

DATE

DATEデータ型は、日付と時刻を7バイトの固定長フィールドに格納するために使用します。日付の部分はデフォルトで現在の月の1日に、時刻の部分は午前0時に設定されます。

内部的に、DATEはバイナリ形式で保存されます。DATE列値をプログラムの文字列に変換するとき、Oracleではセッション用にデフォルトの書式マスクが使用されます。ユリウス日の日付など、別の日付/時刻情報が必要な場合は、TO_CHARファンクションに書式マスクを指定して使用してください。DATE列値と文字列との間の変換には、常にVARCHAR2またはSTRINGなどの(外部の)文字データ型を使用してください。

LONG

LONGデータ型は、可変長文字列の格納に使用します。LONG列には、テキスト、文字の配列、さらには短い文書まで格納できます。LONGデータ型は、VARCHAR2データ型と似ていますが、LONG列の最大幅が2147483647バイト(2GB)である点が異なります。

LONG列は、UPDATE文、INSERT文および(大部分の)SELECT文で使用できますが、式、ファンクション・コール、またはWHEREGROUP BYおよびCONNECT BYなどのSQL句では使用できません。各データベース表で使用できるLONG列は1つのみで、その列には索引は付けられません。

LONG RAW

LONG RAWデータ型は、可変長バイナリ・データまたはバイト文字列の格納に使用します。LONG RAW列の最大幅は2147483647バイト(2GB)です。

LONG RAWデータはLONGデータに似ていますが、OracleではLONG RAWデータの意味は解釈されず、あるシステムから別のシステムにLONG RAWデータを送信しても、キャラクタ・セットの変換は行われない点が異なります。LONGデータに適用される制限事項は、LONG RAWデータにも適用されます。

MLSLABEL

MLSLABELデータ型は、可変長バイナリ・オペレーティング・システム・ラベルの格納に使用します。Oracleでは、データのアクセス制御にラベルを使用します。詳細は、『Oracle Database管理者ガイド』を参照してください。

MLSLABELデータ型を使用すれば、データベース列を定義できます。データ型がMLSLABELの列には、任意の有効なオペレーティング・システム・ラベルを挿入できます。ラベルがテキスト形式の場合、Oracleではそのラベルをバイナリ値に自動的に変換します。テキスト文字列の長さは、最大255バイトです。ただし、MLSLABEL値の内部での長さは、2バイトから5バイトの間です。

MLSLABEL列から値を選択し、文字変数に代入することもできます。Oracleでは、内部バイナリ値はVARCHAR2値から自動的に変換されます。

NUMBER

NUMBERデータ型は、固定数または浮動小数点数の格納に使用し、事実上サイズに制限はありません。精度(合計桁数)と位取り(四捨五入が発生する位を決定)を指定できます。

NUMBER値の最大精度は38です。大きさの範囲は1.0E-129から9.99E125です。位取りの範囲は-84から127です。たとえば、位取りが-3とは、数が1000単位で近似されることを意味します(3456は3000になります)。位取りが2とは、値が1/100単位で近似されることを意味します(3.456は3.46になります)。

精度と位取りを指定すると、Oracleはデータを格納する前に追加の整合性チェックをします。値が精度を超えると、Oracleはエラー・メッセージを発行します。値が位取りを上回ると、Oracleは値を丸めます。

RAW

RAWデータ型は、バイナリ・データまたはバイト文字列の格納に使用します(グラフィックス文字のシーケンスなど)。RAWデータは、Oracleでは解釈されません。

RAWデータ型には、255バイトまでの最大幅を指定できる必須パラメータを指定します。構文は次のとおりです。

RAW(maximum_width)

最大幅の指定には、定数または変数は使用できません。整数リテラルを使用する必要があります。

RAWデータはCHARデータと似ていますが、OracleではRAWデータの意味は解釈されず、あるシステムから別のシステムにRAWデータを送信しても、キャラクタ・セットの変換(たとえば、7ビットASCIIからEBCDIC Code Page 500への変換)は行われない点が異なります。

ROWID

内部的には、Oracleデータベース内のすべての表にはROWIDという擬似列が1つあり、ここには行IDというバイナリ値が格納されます。ROWIDは行を一意に識別し、特定の行にアクセスする最速の方法です。

VARCHAR2

VARCHAR2データ型は、可変長文字列の格納に使用します。文字列が内部でどのように表されるかは、データベース・キャラクタ・セット(たとえば、7ビットASCIIまたはEBCDIC Code Page 500など)によって異なります。

VARCHAR2データベース列の最大幅は2000バイトです。VARCHAR2列を定義するには、次の構文を使用します。

VARCHAR2(maximum_width)

maximum_widthは、1から2000の範囲の整数リテラルです。

VARCHAR2(n)列の最大幅は、文字単位ではなくバイト単位で指定します。そのため、VARCHAR2(n)列にマルチバイト(2バイト)文字が格納される場合、その最大幅はn/2文字未満になります。

SQL疑似列および関数

SQLでは、表3-2の擬似列を認識し、擬似列からは特定のデータ項目が戻されます。

表3-2 擬似列のデータ型

疑似列 内部データ型

CURRVAL

NUMBER

LEVEL

NUMBER

NEXTVAL

NUMBER

ROWID

ROWID

ROWLABEL

MLSLABEL

ROWNUM

NUMBER

疑似列は、実際に表に存在する列ではありません。ただし、疑似列は列のように扱われるため、疑似列の値を表からSELECTする必要があります。ダミーの表から擬似列の値を選択すると便利な場合があります。

さらに、SQLでは、表3-3のパラメータがなく、特定のデータ項目を戻すファンクションを認識します。

表3-3 パラメータのないファンクションのデータ型

ファンクション 内部データ型

SYSDATE

DATE

UID

NUMBER

USER

VARCHAR2

SQLの擬似列およびファンクションは、SELECT文、INSERT文、UPDATE文およびDELETE文で参照できます。次の例では、SYSDATEを使用して、従業員が雇用されてからの月数を計算しています。

EXEC SQL SELECT MONTHS_BETWEEN(SYSDATE, HIREDATE)
 INTO :months_of_service
 FROM EMP
 WHERE EMPNO = :emp_number;

これから、SQLの疑似列および関数を簡単に説明します。詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

CURRVALは、指定された順序における現行の番号を戻します。CURRVALを参照する前に、NEXTVALを使用して順序番号を生成する必要があります。

LEVELは、ツリー構造におけるノードのレベル番号を戻します。ルートはレベル1、ルートの子はレベル2、孫はレベル3になります。

LEVELSELECT CONNECT BY文で使用して、表の一部または全部の行をツリー構造に組み込むことができます。ORDER BY句またはGROUP BY句でLEVELを使用すると、ツリーの各レベルでデータが分離されます。

問合せでツリーが検索される方向(ルートから下へ、またはブランチから上へ)は、PRIOR演算子で指定します。ツリーのルートを識別する条件は、START WITH句で指定します。

NEXTVALは、指定された順序における次の番号を戻します。順序を作成した後、それを使用してトランザクション用に一意の順序番号を作成できます。次の例では、partnoという順序で部品番号を割り当てます。

EXEC SQL INSERT INTO PARTS
 VALUES (partno.NEXTVAL, :description, :quantity, :price);

トランザクションで順序番号が生成された場合、そのトランザクションをコミットまたはロールバックすると順序番号が増やされます。NEXTVALを参照すると、現在の順序番号がCURRVALに格納されます。

ROWIDは、16進数で行アドレスを戻します。

ROWNUMは、表から行が選択された順序を示す番号を戻します。最初に選択された行のROWNUMは1に、2番目の行のROWNUMは2になります。SELECT文にORDER BY句が含まれている場合は、選択された行にROWNUMが割り当てられたにソートが実行されます。

ROWNUMを使用して、SELECT文で戻される行数を制限できます。また、UPDATE文でROWNUMを使用して、表の各行に一意の値を割り当てることもできます。WHERE句でROWNUMを使用した場合は、取得する行数が制限されるのみで、SELECT文の処理は停止されません。WHERE句でのROWNUMの適切な使用方法は、次の方法のみです。

... WHERE ROWNUM < constant;

これは、ROWNUMの値は行が取得されたときにのみ増加するためです。次のように指定した場合、4行目までは取り出されないため、この検索条件が満たされません。

... WHERE ROWNUM = 5;

SYSDATEは、現在の日付と時刻を戻します。

UIDは、Oracleユーザーに割り当てられた一意のID番号を戻します。

USERは、Oracleカレント・ユーザーの名前を戻します。

ROWLABEL列

SQLでは、Oracleでデータベースごとに作成される特殊な列ROWLABELも認識されます。他の列と同様に、ROWLABELは、SQL文で参照できます。ROWLABELは、行のオペレーティング・システムのラベルを戻します。

ROWLABELの一般的な使用方法、問合せ結果のフィルタ処理です。たとえば、次の文ではセキュリティ・レベルがunclassifiedより高い行のみが数えられます。

EXEC SQL SELECT COUNT(*) INTO :head_count FROM EMP
 WHERE ROWLABEL > 'UNCLASSIFIED';

ROWLABEL列の詳細は、『Oracle Database管理者ガイド』を参照してください。

外部データ型

表3-4のように、外部データ型にはすべての内部データ型と、サポートされている他のホスト言語で使用するいくつかのデータ型が含まれています。たとえば、STRING外部データ型は、C言語ではNULLで終了する文字列を指し、DECIMALデータ型は、COBOLパック10進数を指します。データ型の名前はデータ型の同値化で使用し、データ型のコードは動的SQLの方法4で使用します。

表3-4 外部データ型

名前 コード 説明

CHAR

1 96

可変長文字列(65535バイト以下)、固定長文字列(65535バイト以下)(注意1を参照)

CHARF

96

<= 65535バイト、固定長文字列

CHARZ

97

NULLで終了する固定長文字列(65535バイト以下)(注意2を参照)

DATE

12

7バイト、固定長日付/時刻値

DECIMAL

7

COBOLパック10進数

DISPLAY

91

COBOL数値文字列

FLOAT

4

4バイトまたは8バイトの浮動小数点数

INTEGER

3

符号付き整数(2バイトまたは4バイト)

LONG

8

固定長文字列(2147483647バイト以下)

LONG RAW

24

固定長バイナリ・データ(217483647バイト以下)(注意3を参照)

LONG VARCHAR

94

可変長文字列(217483643バイト以下)(注意3を参照)

LONG VARRAW

95

<= 217483643バイト、可変長バイナリ・データ

MLSLABEL

106

可変長バイナリ・データ(2バイトから5バイト)

NUMBER

2

整数または浮動小数点数

RAW

23

固定長バイナリ・データ(65535バイト以下)(注意2を参照)

ROWID

11

固定長バイナリ値(通常13バイト)

STRING

5

NULLで終了する可変長文字列(65535バイト以下)(注意2を参照)

UNSIGNED

68

2バイトまたは4バイトの符号なし整数

VARCHAR

9

可変長文字列(65533バイト以下)(注意3を参照)

VARCHAR2

1

可変長文字列(65535バイト以下)(注意2を参照)

VARNUM

6

可変長2進数

VARRAW

15

可変長バイナリ・データ(65533バイト以下)(注意3を参照)

注意:

  1. CHARは、MODE={ORACLE|ANSI13|ANSI14}の場合はデータ型1、MODE=ANSIの場合はデータ型96です。

  2. 一部のプラットフォームでは、最大サイズが32767 (32K)です。

  3. EXEC SQL VAR文にはnバイト長のフィールドを含めないでください。

CHAR

CHARの動作は、DBMSオプションとMODEオプションの設定により異なります。

CHARF

MODE=ANSIの場合、OracleではCHARデータ型はすべての文字ホスト変数に割り当てられます。CHARデータ型は、固定長文字列の格納に使用します。ほとんどのプラットフォームでは、CHAR値の最大長は65535バイト(64KB)です。DBMSオプションとMODEオプションの関係の詳細は、表6-4を参照してください。

入力時。Oracleでは、入力ホスト変数に指定されたバイト数を読み取り、後続の空白を切り捨てずに、ターゲット・データベース列に入力値を格納します。

入力値がデータベース列の定義より長い場合は、エラーが発生します。入力値がすべて空白の場合は、空白が文字値と同様に扱われます。

出力時。Oracleからは出力ホスト変数に指定したバイト数が戻され、必要に応じて空白が埋め込まれて、出力値がターゲット・ホスト変数に割り当てられます。NULLが戻される場合、ホスト変数は空白で埋められます。

出力値がホスト変数の宣言長より長い場合、Oracleはホスト変数に割り当てる前に出力値を切り捨てます。インディケータ変数が使用可能な場合、インディケータ変数は出力値の元の長さに設定されます。

CHARZ

CHARZデータ型は、NULLで終了する固定長文字列の格納に使用します。ほとんどのプラットフォームでは、CHARZ値の最大長は65,535バイトです。Pro*COBOLまたはPro*FORTRANでは、この外部データ型は必要ありません。

入力時、 CHARZデータ型とSTRINGデータ型の機能は同じです。入力値はNULL文字で終了する必要があります。NULL終了文字は、文字列の区切り記号としての役割のみを果し、データの一部にはなりません。

出力時、CHARZデータ型とCHARデータ型の機能は同じです。出力値にはNULL終了文字が付けられ、必要に応じて空白文字も埋め込まれます。

DATE

DATEデータ型は、日付および時刻を7バイトの固定長フィールドに格納するために使用します。表3-5に示すように、世紀、年、月、日、時(24時間形式)、分および秒は、左から右にこの順序で格納されます。

表3-5 DATEデータ型の例

バイト 1 2 3 4 5 6 7

意味

世紀

例 1994年10月17日午後1時23分12秒

119

194

10

17

14

24

13

世紀と年を表すバイトは、100を加算した表記です。時間、分および秒は、1を加算した表記です。B.C.E.(西暦紀元前)の日付は99以下です。エポックは、紀元前4712年1月1日です。この日付の場合、世紀のバイトは53で、年のバイトは88です。時間のバイト範囲は1から24です。分と秒の範囲は、1から60です。時刻のデフォルトは、午前零時(1, 1, 1)です。

DECIMAL

Pro*COBOLでは、DECIMALデータ型を使用して計算用のパック10進数の格納に使用します。COBOLでは、ホスト変数は暗黙的な小数点を持つ符号付きCOMP-3フィールドであることが必要です。データ変換中に有効な桁が失われると、ホスト変数はアスタリスクで埋められます。

DISPLAY

Pro*COBOLでは、DISPLAYデータ型を使用して数値文字データを格納します。DISPLAYデータ型は、COBOLのDISPLAY SIGN LEADING SEPARATEの数値を参照し、通常、PIC S9(n)にはn + 1バイトの記憶域が、PIC S9(n)V9(d)にはn + d + 1バイトの記憶域が必要です。

FLOAT

FLOATデータ型は、小数部分を持つ数値またはINTEGERデータ型の容量を超える数値を格納するために使用します。数値はご使用のコンピュータの浮動小数点書式を使用して表され、通常、4または8バイトの記憶域を必要とします。入力および出力ホスト変数に長さを指定する必要があります。

Oracleでは、数値の内部形式が10進数であるため、浮動小数点の場合よりも大きい精度で数を表現できます。

注意:

SQL文でFLOAT値を比較する場合、FLOATデータ型では数値がバイナリ(10進数ではない)で格納されるので、SQLファンクションのROUNDが使用されます。そのため、小数部分は正確に変換されません。

INTEGER

INTEGERデータ型は、小数部分のない数値の格納に使用します。整数は、2バイトまたは4バイトの符号付き2進数です。1語内のバイトの順序は、システムによって異なります。入力および出力ホスト変数に長さを指定する必要があります。出力時には、列値が浮動小数点数であれば、小数部が切り捨てられます。

LONG

LONGデータ型は、固定長の文字列の格納に使用します。LONGデータ型はVARCHAR2データ型と似ていますが、LONGの最大長が2147483647バイト(2GB)である点が異なります。

LONG RAW

LONG RAWデータ型は、固定長バイナリ・データまたはバイト文字列の格納に使用します。LONG RAW値の最大長は2147483647バイト(2GB)です。

LONG RAWデータは、LONGデータと似ていますが、OracleではLONG RAWデータの意味は解釈されず、LONG RAWデータをあるシステムから別のシステムへ送信しても、キャラクタ・セットは変換されません。

LONG VARCHAR

LONG VARCHARデータ型は、可変長文字列の格納に使用します。LONG VARCHAR変数では、4バイト長のフィールドの後に文字列フィールドが続きます。文字列フィールドの最大長は2147483643バイトです。EXEC SQL VAR文では、4バイト長のフィールドを含めないでください。

LONG VARRAW

LONG VARRAWデータ型は、バイナリ・データまたはバイト文字列の格納に使用します。LONG VARRAW変数では、4バイト長のフィールドにデータ・フィールドが続きます。データ・フィールドの最大長は2147483643バイトです。EXEC SQL VAR文では、4バイト長のフィールドを含めないでください。

MLSLABEL

MLSLABELデータ型は、可変長のバイナリ・オペレーティング・システム・ラベルの格納に使用します。Oracleでは、データのアクセス制御にラベルを使用します。MLSLABELデータ型を使用して列を定義できます。データ型がMLSLABELの列には、任意の有効なオペレーティング・システム・ラベルを挿入できます。

入力時。Oracleでは、入力値は有効なオペレーティング・システム・ラベルであるバイナリ・ラベルに変換します。無効のラベルの場合は、エラー・メッセージが出ます。ラベルが有効ならば、ターゲット・データベース列に格納されます。

出力時。Oracleでは、バイナリ・ラベルを文字列に変換し、文字列はCHARCHARZSTRINGVARCHARまたはVARCHAR2のいずれかのデータ型です。

NUMBER

NUMBERデータ型は、固定または浮動小数点のOracle数値を格納するために使用します。精度および位取りを指定できます。NUMBER値の最大精度は38です。大きさの範囲は1.0E-129から9.99E125です。位取りの範囲は-84から127です。

NUMBER値は、可変長形式(1バイトの指数部に最大20バイトの仮数部が続く)で格納されます。指数バイトの上位1ビットは符号ビットであり、正数の場合に設定します。下位7ビットは指数を表し、100の位を底とし、オフセットは65です。

各仮数バイトは基数100で範囲1から100の数字です。正数の場合は、それに1を加算した数字となります。負数の場合、101からそれが引かれ、20バイトの仮数部があるのでないかぎり、102を含んでいるバイトがデータ・バイトに追加されます。各仮数バイトは、2つの10進数を表すことができます。仮数は正規化され、先行する0(ゼロ)は格納されません。仮数部には最大20のデータ・バイトを使用できますが、正確さが保証されているのは19バイトのみです。19個のデータ・バイトは、それぞれ基数100の数字を表し、38桁の最大精度を提供します。

出力時、ホスト変数にはOracleで内部的に表されたとおりの数値が含まれます。考えられる最大の数値を含めるには、出力ホスト変数は21バイトの長さが必要です。数値を表すために使用されるバイトのみが戻されます。Oracleでは出力値の空白を埋め込んだり、NULLで終了させたりしません。戻り値の長さを知る必要がある場合は、かわりにVARNUMデータ型を使用してください。通常、このデータ型を使用する理由はほとんどありません。

RAW

RAWデータ型は、固定長のバイナリ・データまたはバイト文字列の格納に使用します。ほとんどのプラットフォームでは、RAW値の最大長は65535バイトです。RAWデータはCHARデータと似ていますが、OracleではRAWデータの意味は解釈されず、RAWデータをあるシステムから別のシステムに送信しても、キャラクタ・セットは変換されません。

ROWID

ROWIDデータ型は、バイナリ行IDを固定長(通常は13バイト)に格納するために使用します。フィールド・サイズは、ポート固有です。そのため、使用しているシステム固有のOracleマニュアルをチェックしてください。VARCHAR2ホスト変数を使用すると、読取り可能な形式で行IDを格納できます。行IDを選択またはフェッチしてVARCHAR2ホスト変数に入れると、Oracleではそのバイナリ値を18バイトの文字列に変換し、次の書式で戻します。

BBBBBBBB.RRRR.FFFF

ここで、BBBBBBBBはデータベース・ファイルのブロック、RRRRはブロック内の行(最初の行は0)、FFFFはデータベース・ファイルを示します。これらの値は16進数です。たとえば、次の行IDがあるとします。

0000000E.000A.0007

これは、7番目のデータベース・ファイルの15番目のブロックの11行目を示します。

通常、行IDをVARCHAR2ホスト変数にフェッチし、ホスト変数をUPDATE文またはDELETE文のWHERE句のROWID擬似列と比較します。そのようにして、カーソルによってフェッチされた最終行を識別できます。

注意:

完全な移植性が必要な場合、あるいはアプリケーションでTransparent Gatewayを使用してOracle以外のデータベースと通信する場合は、VARCHAR2ホスト変数を宣言するときに、最大長を(18ではなく)256に指定してください。また、アプリケーションがOracle Open Gatewayを介してOracle以外のデータ・ソースと通信する場合も、最大長として256バイトを指定します。ホスト変数の内容については推測できませんが、ホスト変数はSQL文中で正常に機能します。

STRING

STRINGデータ型はVARCHAR2データ型と似ていますが、STRING値は常にNULL文字で終了する点が異なります。

入力時。Oracleは指定された長さを使用して、ヌル終端文字のスキャンを制限します。ヌル終端文字が見つからなければ、エラーが生成されます。長さを指定しない場合、Oracleは最大長とみなします。大部分のプラットフォームでは65535です。

STRING値の最小長は2バイトです。最初の文字がNULL終了文字で、指定した長さが2の場合、列がNOT NULLと定義されていなければ、OracleではNULLを挿入します。空白のみの値またはNULLで終了する値はそのまま格納されます。

出力時。Oracleは戻された最後の文字に1バイトのヌル文字を追加します。文字列長が指定された長さを超える場合は、Oracleは出力値を切り捨て、1バイトのヌル文字を追加します。

UNSIGNED

UNSIGNEDデータ型は、符号なし整数の格納に使用します。符号なし整数は、2バイトまたは4バイトの2進数です。1語内のバイトの順序は、システムによって異なります。入力および出力ホスト変数に長さを指定する必要があります。出力時には、列値が浮動小数点数であれば、小数部が切り捨てられます。Pro*COBOLまたはPro*FORTRANでは、この外部データ型は必要ありません。

VARCHAR

VARCHARデータ型は、可変長文字列の格納に使用します。VARCHAR変数では、2バイト長のフィールドの後に65533バイト以下の文字列フィールドが続きます。ただし、VARCHAR配列要素では、文字列フィールドの最大長は65530バイトです。VARCHAR変数の長さを指定するときには、長さフィールド用の2バイトが含まれていることを確認してください。これより長い文字列には、LONG VARCHARデータ型を使用してください。EXEC SQL VAR文では、2バイト長のフィールドを含めないでください。

VARCHAR2

MODE=ORACLEの場合、OracleではVARCHAR2データ型をすべての文字ホスト変数に割り当てます。VARCHAR2データ型は、可変長文字列の格納に使用します。ほとんどのプラットフォームでは、VARCHAR2値の最大長は65535バイトです。

VARCHAR2(n)値の最大長は、文字単位ではなくバイト単位で指定します。したがって、VARCHAR2(n)変数にマルチバイト・キャラクタを格納する場合、最大長はn文字未満になります。

入力時。Oracleは入力ホスト変数に指定されたバイト数を読み込み、後続の空白文字を取り除き、入力値をターゲット・データベース列に格納します。ここでは注意が必要です。未初期化ホスト変数には、一連のヌル文字が含まれている場合があります。したがって、常に文字入力ホスト変数の宣言長まで空白文字で埋めてください。(COBOL PIC X(n)およびFORTRAN CHARACTER*nの各変数では、これは自動的に行われます。)

入力値がデータベース列の定義より長い場合は、エラーが発生します。入力値がすべて空白の場合は、空白がNULLと同様に扱われます。

文字値が有効な数を表す場合、NUMBER列値に変換できます。文字値が有効な数値を表していない場合は、エラーが発生します。

出力時。Oracleからは出力ホスト変数に指定したバイト数が戻され、必要に応じて空白が埋め込まれて、出力値がターゲット・ホスト変数に割り当てられます。NULLが戻される場合、ホスト変数は空白で埋められます。

出力値がホスト変数の宣言長より長い場合、Oracleはホスト変数に割り当てる前に出力値を切り捨てます。インディケータ変数が使用可能な場合、インディケータ変数は出力値の元の長さに設定されます。

NUMBER列値は文字値に変換できます。文字ホスト変数の長さによって精度が決定します。ホスト変数の長さがその数に対して短すぎる場合は、科学表記法が使用されます。たとえば、列値abcdefg89を長さ6のホスト変数に選択すると、ホスト変数に値1.2E08が戻されます。

VARNUM

VARNUMデータ型はNUMBERデータ型に似ていますが、VARNUM変数の1バイト目に値の長さが格納される点が異なります。入力時には、ホスト変数の1バイト目を値の長さに設定する必要があります。出力時には、ホスト変数に長さとそれに続いてOracleで内部的に表現された数が含まれます。この数が最大になっても対応できるように、ホスト変数の長さは22バイトにする必要があります。列値をVARNUMホスト変数に選択した後、1バイト目をチェックすれば値の長さがわかります。

VARRAW

VARRAWデータ型は、可変長のバイナリ・データまたはバイト文字列の格納に使用します。VARRAWデータ型はRAWデータ型と似ていますが、VARRAW変数には2バイト長のフィールドの後に65533バイト以下のデータ・フィールドが続く点が異なります。それより長い文字列の場合は、LONG VARRAWデータ型を使用します。EXEC SQL VAR文では、2バイト長のフィールドを含めないでください。VARRAW変数の長さは、その長さフィールドを参照すればわかります。