ヘッダーをスキップ
Oracle Rdb SQLリファレンス・マニュアル
リリース7.2
E06178-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 


$ ACS CREATE LIBRARY [.ADALIB]
$ ACS SET LIBRARY [.ADALIB]
$ SQLPRE == "$SQL$PRE"
$ SQLPRE
INPUT FILE> sql_all_datatypes.sqlada/ADA
$ ! This LINK command requires that the logical name
$ ! LNK$LIBRARY is defined as SYS$LIBRARY:SQL$USER.OLB.
$ ACS LINK sql_all_datatypes sql_sql_all_datatypes.obj
$ RUN sql_all_datatypes.exe
        .
        .
        .
This is the stored row

CHAR_COL: Begin  end
SMALLINT_COL: -32768
INTEGER_COL: -2147483648
REAL_COL:  0.12346
DOUBLE_PRECISION_COL:  0.12345678901234
DATE_COL: 30-OCT-1987 09:00:00.00
VARCHAR_COL: This string is 39 characters in length.
        .
        .
        .
This is the row after update

CHAR_COL: NULL
SMALLINT_COL:  32767
INTEGER_COL:  2147483647
REAL_COL:  0.12346
DOUBLE_PRECISION_COL:  0.12345678901234
DATE_COL: 10/30/87 09:00:00
VARCHAR_COL: This string is 39 characters in length.

注意

Adaプリコンパイラを使用する場合、サブプログラムごとに一意のプロシージャ名を使用する必要があります。プログラムの様々なサブプログラムに同じプロシージャ名が使用される場合、いくつかの代替方法があります。

  • プリコンパイラされたAdaではなく、モジュール言語を使用するのが理想的です。モジュール言語を使用する場合、この制限は適用されません。SQLモジュール言語の詳細は、第3章を参照してください。

  • または、Adaの個別コンパイル時機能を使用できます。この機能を使用すると、すべてのサブプログラムが個別にプリコンパイルされます。ただし、この代替方法を使用する場合、メイン・プログラム・ユニットで宣言された型や変数などは、サブプログラムのSQL文で認識されないため、これらの文では参照できなくなります。

  • もう1つの方法は、SQL文で使用されるすべての名前を一意にすることです。アプリケーションがANSI規格に準拠する必要がある場合、SQL文で使用されるすべてのホスト言語変数名はファイル内で一意である必要があります。

4.4.3 サポートされているC変数宣言

注意

C言語では、大/小文字が区別されます。Cプログラムで宣言されたオブジェクトの名前は大/小文字が区別されますが、SQL表の名前と他の名前は大/小文字が区別されません。このため、SQL文に指定するC構成メンバーでは注意が必要です。これらの構成メンバーには、プログラムの各部の変数名とラベルが含まれます。C変数の宣言の詳細は、『Oracle Rdb7 Guide to SQL Programming』を参照してください。

次のリストは、CでSQLプリコンパイラがサポートしている文字データ型の変数宣言構文を示しています。

サポートされているキャラクタ・セットの詳細は、第2.1節を参照してください。

次のリストは、CでSQLプリコンパイラがサポートしている変数宣言構文を示しています。

表4-4 サポートされているCデータ型
C型または
typedef

SQL型

コメントおよび制限
char CHARACTER  
char * LONG VARCHAR VARCHAR(16383)と想定される。
char [n] CHARACTER nは整数リテラルである必要がある。#defineの名前または式はサポートされない。
int INTEGER 符号なしでは指定できない。
short SMALLINT 符号なしでは指定できない。
short int INTEGER 符号なしでは指定できない。
long int INTEGER 符号なしでは指定できない。
float REAL  
double DOUBLE PRECISION  
enum INTEGER  
long INTEGERまたはBIGINT OpenVMSの場合、longデータ型は32ビットである。
int8 TINYINT #include <ints.h> が必要である。
int16 SMALLINT #include <ints.h> が必要である。
__int16 SMALLINT  
int32 INTEGER #include <ints.h> が必要である。
__int32 INTEGER  
int64 BIGINT OpenVMS Alphaプラットフォームのみ。 #include <ints.h> が必要である。
__int64 BIGINT  
  $SQL_VARCHAR (n) CHARACTER SET句はオプションである。
  SQL_DATE
SQL_DATE_ANSI
SQL_DATE_VMS
SQL_TIME
SQL_TIMESTAMP
SQLプリコンパイラにより、ネイティブCデータ型の疑似型が変換される。
  SQL_INTERVAL (DAY TO SECOND) 2つの日付または時刻間の差異を示す変数にはこのデータ型を使用する。サポートされているすべてのINTERVALデータ型は、表4-2を参照。

サポートされていない一部の構文は、SQL操作では重要でない場合、受け入れられますが、無視されます。たとえば、記憶域クラス修飾子の実装は、SQL操作では重要でないとみなされます。このような修飾子は宣言では受け入れられますが、無視されます。一方、SQLで変数を正しく使用するには、SQLによってデータ型構文の実装が解釈される必要があります。このため、SQLで列挙データ型がサポートされていないときに宣言にキーワードenumが含まれる場合、宣言は無効とみなされます。すべての無効な宣言について、宣言自体の後にエラーが返されるのではなく、この宣言を参照するSQL文の後にエラーが返されます。#defineディレクティブは認識されません。たとえば、{および}をBEGINおよびENDとする定義はサポートされていません。無効な宣言構文の例は、次のとおりです。各宣言の後ろにあるコメントは、宣言によって指定された変数や、宣言に依存する変数をSQL文で参照できない理由を示しています。


int           indicator_item[];    /* implicit dimension for array */
char          func_ret();          /* function return status */
int           mult_arr[5][10];     /* multidimensional array */
unsigned int  uns_var;             /* unsigned data */
int           bit3 : 4, bit4 : 3;  /* bit fields */
enum          {a, b, c} enum_var;  /* enumerated data type */
char          *a_prt[5];           /* array of pointers */
int           **x;                 /* two levels of pointers */
struct        x_rec *x             /* pointer to structures */
foo (char *x, int y)               /* declarations within functions */

表4-5は、各SQLデータ型についてサポートされるC変数宣言の例を示しています。

表4-5 SQLデータ型に対するC宣言
SQLの例 Cの例
CHAR(10) char str1[11]
SQLでは、文字列はASCIZ形式と想定される。このため、CHAR列のcharホスト言語変数は列サイズより1文字多いものとして宣言する。(これにより、ASCIZ文字列の最後にヌル文字用の空白を確保できる。)データ・ディクショナリから定義をコピーするときに、SQL INCLUDE文にFIXED引数を指定して、必要に応じてこの制限を回避できる。

キャラクタ・セットはUNSPECIFIED。

CHAR(10) CHARACTER SET KANJI char CHARACTER SET KANJI str[11]1
このデータ型は、キャラクタ・セットがCHARACTER SET句で指定されているという点以外は、charと同じ特性を持つ。
VARCHAR(10) $SQL_VARCHAR(10)
typedef $SQL_VARCHAR(max_length_of_varchar)を使用する場合、ワードの長さを示すホスト言語変数(len)を定義するマクロがファイルの先頭で宣言され、データのバイト数(data)がこの後ろに続く。この例では、lenの後ろに10バイトのデータが続く。バイナリ・データを格納して渡すために適したC変数宣言としてSQLでサポートされているのは、この宣言のみである。

キャラクタ・セットはUNSPECIFIED。

VARCHAR(10) CHARACTER SET KANJI $SQL_VARCHAR(10) CHARACTER SET KANJI str1
このデータ型は、キャラクタ・セットがCHARACTER SET句で指定されているという点以外は、$SQL_VARCHARと同じ特性を持つ。
LONG VARCHAR char str3[16384]
SQLでは、文字列はASCIZ形式と想定されるため、ヌル文字列終端文字を使用して、LONG VARCHAR列に格納されている値の長さが確認される。このため、LONG VARCHARデータ型のホスト言語変数は、固定長のchar変数として宣言する。この変数は、列で使用可能な最長の有効文字列にヌル終端文字用の1文字を加えた長さに対応できる必要がある。

キャラクタ・セットはUNSPECIFIED。

TINYINT char num1
SQLではTINYINT列に対するスケール変更係数をサポートしているが、Cではサポートしていない。
SMALLINT short num1
SQLではSMALLINT列に対するスケール変更係数をサポートしているが、Cではサポートしていない。SMALLINT列をスケール変更する場合、変数はshortではなくfloatとして宣言する。
INTEGER long num2
SQLではINTEGER列に対するスケール変更係数をサポートしているが、Cではサポートしていない。INTEGER列をスケール変更する場合、変数はintではなくdoubleとして宣言する。
BIGINT double num3
CではBIGINTデータ型をサポートしていない。Cデータ型のdoubleは、スケール変更するBIGINT列とスケール変更しないBIGINT列の両方に適しており、変換はSQLによって実行される。ただし、doubleデータ型の場合、BIGINT列に格納可能なより大きい値の近似処理のみが行われる。
FLOAT(6)
FLOAT(25)
float num4
double num4
REAL float num5
DOUBLE PRECISION double num6
DATE SQL_DATE datenum1
DATE ANSI SQL_DATE_ANSI datenum2
DATE VMS SQL_DATE_VMS datenum3
TIME SQL_TIME datenum4
TIMESTAMP SQL_TIMESTAMP datenum5
INTERVAL DAY TO HOUR SQL_INTERVAL (DAY TO HOUR) datenum6
サポートされているすべてのINTERVALデータ型は、表4-2を参照。
LIST OF BYTE VARYING char datenum[8]
Cでは、LIST OF BYTE VARYINGデータ型はサポートしていない。LIST OF BYTE VARYING列に対して8バイトの文字変数を宣言すると、リストの先頭要素を指し示す、セグメント化された文字列識別子を格納するために十分な空白が確保される。このリストの個別要素の値を取得するには、CHARデータ型またはVARCHARデータ型のホスト言語変数を使用できる。


1文字長およびプリコンパイラの詳細は、第4.4.1項を参照してください。

オンライン・サンプル・プログラムsql_all_datatypes.scには、変数を宣言してSQL文で使用する例が用意されています。また、このプログラムは、様々なSQLデータ定義文およびデータ操作文も示します。SQLをインストールした後、プログラムを出力、入力または検索することにより、様々なトピックに関するサンプル・コードを見つけることができます。

次の制限はC変数に適用されます。

4.4.4 サポートされているCOBOL変数宣言

次のリストは、COBOLでSQLプリコンパイラがサポートしている文字データ型の変数宣言構文を示しています。

サポートされているキャラクタ・セットの詳細は、第2.1節を参照してください。

次のリストは、COBOLでSQLプリコンパイラがサポートしている変数宣言構文を示しています。

次の例は、SQLで受け入れられるCOBOL宣言と受け入れられないCOBOL宣言を示しています。


* SQL will accept:
01 A PIC S9(7)V99 COMP.
* SQL will not accept (unsigned numeric):
01 B PIC 9(7)V99 COMP.
*
*
* SQL will accept:
01 C COMP-1 VALUE IS -1.
* SQL will not accept (implicit USAGE IS DISPLAY):
01 E PIC S9(4).
*
*
* SQL will accept:
01 indicators-x.
   05 indicator-null   pic s9(9) comp occurs 40.
* SQL will not accept
01 indicators-x.
   05 indicator-null   pic s9(9) comp occurs 40 indexed by x1.
*
* SQL will accept (host structure and indicator array):
01      F       EXTERNAL.
        02      F1      PIC S9(9) COMP.
        02      F2      PIC X(20).
        02      F2_R    REDEFINES F2.
                03      G1      PIC X(10).
                03      G2      COMP-2.
        02      F3      PIC S9(9) COMP.
01 F_IND_ARRAY
        02 F_IND OCCURS 3 TIMES PIC S9(9) COMP.

表4-6は、各SQLデータ型についてサポートされるCOBOL変数宣言の例を示しています。

表4-6 SQLデータ型に対するCOBOL宣言
SQLの例 COBOLの例
CHAR(10) 01 STR1 PICTURE X(10).
キャラクタ・セットはUNSPECIFIED。
CHAR(10) CHARACTER SET KANJI 01 STR1 CHARACTER SET KANJI PICTURE X(10).5
VARCHAR(80) 01 STR2.
49 STR2L PICTURE S9(4) COMP.
49 STR2C PICTURE X(80).
キャラクタ・セットはUNSPECIFIED。
VARCHAR(80) CHARACTER SET KANJI 01 STR2.
49 STR2L PICTURE S9(4) COMP.
49 STR2C CHARACTER SET KANJI PICTURE X(80).5
LONG VARCHAR 01 STR3.
49 STR3L PICTURE S9(4) COMP.
49 STR3C PICTURE X(16383).
キャラクタ・セットはUNSPECIFIED。
TINYINT(2)
TINYINT
COBOLではサポートされない。
COBOLではサポートされない。
SMALLINT(2)
SMALLINT
01 NUM1 PICTURE S99V99 COMP.
01 NUM1 PICTURE S9(4) COMP.
INTEGER(2)
INTEGER
01 NUM2 PICTURE S9(7)V99 COMP.
01 NUM2 PICTURE S9(9) COMP.
BIGINT(2)
BIGINT
01 NUM3 PIC S9(16)V99 COMP.
01 NUM3 PIC S9(18) COMP.
FLOAT(6)
FLOAT(25)
01 NUM4 COMP-1.
01 NUM4 COMP-2.1
REAL 01 NUM5 COMP-1.
DOUBLE PRECISION 01 NUM6 COMP-2.2
DATE 01 DATENUM1 SQL_DATE.
DATE ANSI 01 DATENUM2 SQL_DATE_ANSI.
DATE VMS 01 DATENUM3 SQL_DATE_VMS.
TIME 01 DATENUM4 SQL_TIME(0).
TIMESTAMP 01 DATENUM5 SQL_TIMESTAMP(2).
INTERVAL DAY TO HOUR 01 DATENUM6 SQL_INTERVAL (DAY TO HOUR).3
LIST OF BYTE VARYING 01 STR4 PICTURE X(8).4


1COMP-2はFLOAT(25)です。
2COMP-2はDOUBLE PRECISIONです。
3表4-2は、サポートされているすべてのINTERVALデータ型を示しています。
4この例は、8バイトの文字列を使用して、セグメント化された文字列(リスト)識別子、リストの先頭要素のポインタを取得する方法を示しています。(必要な場合、かわりにBIGINTを使用することもできます。)このリストの個別要素の値を取得するには、CHARデータ型またはVARCHARデータ型のホスト言語変数を使用します。
5文字長およびプリコンパイラの詳細は、第4.4.1項を参照してください。