ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

# 4.4 プリコンパイラでサポートされているホスト言語変数宣言

SQLプリコンパイラでは、有効なホスト言語変数宣言のサブセットのみが認識されます。埋込みSQL文で認識されない変数宣言を参照すると、この参照が行われたときに致命的エラーが発生します。

SQLプリコンパイラでサポートされているOracle Rdbデータベースおよび様々なホスト言語では、必ずしも同じデータ型セットがサポートされるとはかぎりません。プリコンパイラでは、SQLデータ型に相当するホスト言語変数宣言に加えて、他のホスト言語変数宣言のサブセットが認識されます。

- SQLデータ型に相当するデータ型のホスト言語変数宣言の場合、データベースとホスト言語変数間で値が直接渡されます。

- ホスト言語の浮動小数点データ型は、プリコンパイラのコマンドライン上の/FLOAT修飾子および個々の言語ルールで決まる表現が使用されているとみなされます。これらのルールの詳細は、後続のホスト言語固有の項を参照してください。これらの項では、選択内容は次のように定義される表に基づいています。

      CREATE TABLE TESTTBL (
          KEYFIELD CHAR(10) PRIMARY KEY,
          FLOAT1   REAL,
          FLOAT2   DOUBLE PRECISION);

- 各ホスト言語では、SQLデータ型には対応していないホスト言語変数宣言も多少サポートされています。データベース値はホスト言語データ型に変換され、ホスト言語値はサポート対象のデータ型に変換されます。この変換は、有効なホスト言語宣言のサブセットについてのみ行われます。
  表4-2は、プリコンパイラによって提供される日時データ型を示しています。

  表4-2 プリコンパイラによる日時データのマッピング
  モジュール言語と対話型SQL | プリコンパイラ
  --- | ---
  DATE | SQL_DATE
  DATE_ANSI | SQL_DATE_ANSI
  DATE_VMS | SQL_DATE_VMS
  TIME | SQL_TIME
  TIMESTAMP | SQL_TIMESTAMP
  INTERVAL YEAR | SQL_INTERVAL (YEAR)
  INTERVAL YEAR TO MONTH | SQL_INTERVAL (YEAR TO MONTH)
  INTERVAL MONTH | SQL_INTERVAL (MONTH)
  INTERVAL DAY | SQL_INTERVAL (DAY)
  INTERVAL DAY TO HOUR | SQL_INTERVAL (DAY TO HOUR)
  INTERVAL DAY TO MINUTE | SQL_INTERVAL (DAY TO MINUTE)
  INTERVAL DAY TO SECOND | SQL_INTERVAL (DAY TO SECOND)
  INTERVAL HOUR | SQL_INTERVAL (HOUR)
  INTERVAL HOUR TO MINUTE | SQL_INTERVAL (HOUR TO MINUTE)
  INTERVAL HOUR TO SECOND | SQL_INTERVAL (HOUR TO SECOND)
  INTERVAL MINUTE | SQL_INTERVAL (MINUTE)
  INTERVAL MINUTE TO SECOND | SQL_INTERVAL (MINUTE TO SECOND)
  INTERVAL SECOND | SQL_INTERVAL (SECOND)

- 他のすべてのホスト言語変数宣言については、埋込みSQL文でこれらに対する参照が行われると、エラーが発生します。

次の項では、SQLで認識される有効なホスト言語変数宣言のサブセットを示します。また、これらの項では、各SQLデータ型に相当する有効な宣言の例と、プリコンパイラによって認識されるおよび認識されない他の宣言の例も示します。

注意 ANSI/ISO SQL規格で、埋込みSQL文で使用される変数は、埋め込まれたSQL BEGIN DECLARE...END DECLARE文のペアの内部で宣言する必要があると指定されています。Oracle Rdb SQLプリコンパイラでは、この制限は施行されません。BEGIN DECLARE...END DECLARE文を使用する場合、BEGIN DECLARE...END DECLAREブロックの外部で宣言された変数が検出されると、警告メッセージが表示されます。 アプリケーションでANSI/ISO SQLに準拠することが重要な場合は、埋込みSQL文で使用する変数の宣言をすべてBEGIN DECLARE...END DECLAREブロック内に含める必要があります。BEGIN DECLARE文の詳細は、SQLモジュール言語に関する「BEGIN DECLARE文」を参照してください。

次の各項では、SQLモジュール言語プロシージャに対するホスト言語プログラム・コールの実パラメータとして使用されるホスト言語変数宣言に関する要件については説明しません。このようなホスト言語変数宣言は、SQLモジュール・ファイル内の対応する仮パラメータ宣言に正確に対応している必要があります。対応していない場合は、実行時に予期しない結果が生じる可能性があります。SQLモジュール言語の詳細は、第3章を参照してください。

## 4.4.1 文字パラメータの長さの指定

文字変数の長さを正しく指定するには、次のガイドラインを使用します。

- C言語の場合、文字データ型の列に対応する文字変数は、ヌル終端文字を使用できるように、オクテット単位による最長の有効列値の長さに1オクテットを加えた値として定義する必要があります。

- SQLプリコンパイラでサポートされている他の言語の場合、文字データ型の列に対応する文字変数は、オクテット単位による最長の有効列値の長さとして定義する必要があります。

- 最長の有効列値の長さを計算する場合、列の長さが文字単位またはオクテット単位のどちらで解釈されるかを考慮する必要があります。列の長さの解釈方法は、プログラムにより次の方法によって制御できます。

  - DECLARE MODULE文のCHARACTER LENGTH句

  - DECLARE MODULE文のDIALECT句

  - SET CHARACTER LENGTH文（動的SQLの場合）

  各キャラクタ・セットで1文字に使用されるオクテット数の詳細は、表2-2を参照してください。

次のキャラクタ・セットを使用してMIA_CHAR_SETデータベースを作成するとします。

- デフォルト・キャラクタ・セット: DEC_KANJI

- 各国語キャラクタ・セット: KANJI

- 識別子キャラクタ・セット: DEC_KANJI

データベースにはCOLOURS表が含まれ、この表の列が次の例のように定義されるとします。

    SQL> SHOW DOMAINS;
    User domains in database with filename MIA_CHAR_SET
    ARABIC_DOM                      CHAR(8)
             ISOLATINARABIC 8 Characters,  8 Octets
    DEC_KANJI_DOM                   CHAR(16)
    GREEK_DOM                       CHAR(8)
             ISOLATINGREEK 8 Characters,  8 Octets
    HINDI_DOM                       CHAR(8)
             DEVANAGARI 8 Characters,  8 Octets
    KANJI_DOM                       CHAR(8)
             KANJI 4 Characters,  8 Octets
    KATAKANA_DOM                    CHAR(8)
             KATAKANA 8 Characters,  8 Octets
    MCS_DOM                         CHAR(8)
             DEC_MCS 8 Characters,  8 Octets
    RUSSIAN_DOM                     CHAR(8)
             ISOLATINCYRILLIC 8 Characters,  8 Octets
    SQL> --
    SQL> SHOW TABLE (COLUMNS) COLOURS;
    Information for table COLOURS

    Columns for table COLOURS:
    Column Name                     Data Type        Domain
    -----------                     ---------        ------
    ENGLISH                         CHAR(8)          MCS_DOM
             DEC_MCS 8 Characters,  8 Octets
    FRENCH                          CHAR(8)          MCS_DOM
             DEC_MCS 8 Characters,  8 Octets
    JAPANESE                        CHAR(8)          KANJI_DOM
             KANJI 4 Characters,  8 Octets
    ROMAJI                          CHAR(16)         DEC_KANJI_DOM
    KATAKANA                        CHAR(8)          KATAKANA_DOM
             KATAKANA 8 Characters,  8 Octets
    HINDI                           CHAR(8)          HINDI_DOM
             DEVANAGARI 8 Characters,  8 Octets
    GREEK                           CHAR(8)          GREEK_DOM
             ISOLATINGREEK 8 Characters,  8 Octets
    ARABIC                          CHAR(8)          ARABIC_DOM
             ISOLATINARABIC 8 Characters,  8 Octets
    RUSSIAN                         CHAR(8)          RUSSIAN_DOM
             ISOLATINCYRILLIC 8 Characters,  8 Octets

プリコンパイルされたSQLプログラムでCHARACTER LENGTH CHARACTERSを指定する場合、次のCの例のように、対応する変数を宣言します。

       .
       .
       .
    /* Specify CHARACTER LENGTH CHARACTERS in the DECLARE MODULE statement.
    In addition, specify the  IDENTIFIER, NATIONAL, and DEFAULT character sets.
    */
    exec sql DECLARE MODULE CCC_COLOURS
             NAMES ARE DEC_KANJI
             NATIONAL CHARACTER SET KANJI
             SCHEMA RDB$SCHEMA
             AUTHORIZATION SQL_SAMPLE
             CHARACTER LENGTH CHARACTERS
             DEFAULT CHARACTER SET DEC_KANJI
             ALIAS RDB$DBHANDLE;

    /* If you do not specify character sets in the DECLARE ALIAS statement, SQL
    *  uses the character sets of the compile-time database.
    */
    exec sql DECLARE ALIAS FILENAME mia_char_set;

    /* When you declare a parameter with lowercase char, SQL considers the
    *  character set unspecified and allocates single-octet characters.
    */
    char  english_p[31];

    /* When you specify the character set, SQL allocates single- or multi-octet
    * characters, depending upon the character set.
    */
    char  CHARACTER SET DEC_MCS    french_p[31];
    char  CHARACTER SET KANJI      japanese_p[31];
    char  CHARACTER SET DEC_KANJI  dec_kanji_p[31];
       .
       .
       .

## 4.4.2 サポートされているAda変数宣言

ホスト言語変数は、直接宣言したり、Adaパッケージ（SQL_STANDARD）をコールして宣言できます。

ANSI/ISO SQL規格に準拠する必要がある場合は、SQL_STANDARDパッケージを使用する必要があります。このパッケージにより、ANSI/ISO SQL規格でサポートされているデータ型が定義されます。このパッケージを使用するには、最初にSYS$COMMON:[SYSLIB]SQL$STANDARD.ADAファイルを独自のAdaライブラリにコピーし、次にパッケージをコンパイルします。

SQL_STANDARDパッケージにより、次のANSI規格のデータ型が宣言されます。

- CHAR

- SMALLINT
  SMALLINTデータ型には、1つのサブタイプINDICATOR_TYPEが含まれます。

- INT

- REAL

- DOUBLE_PRECISION

- SQLCODE_TYPE
  SQLCODE_TYPEデータ型には、2つのサブタイプNOT_FOUNDおよびSQL_ERRORが含まれます。

- SQLSTATE_TYPE

アプリケーションがANSI/ISO SQLに準拠していることが重要でない場合は、ホスト言語変数を直接宣言できます。次のリストは、AdaでSQLプリコンパイラがサポートしている変数宣言構文を示しています。

- 標準パッケージのデータ型

  - STRING

  - CHARACTER

  - SHORT_SHORT_INTEGER

  - SHORT_INTEGER

  - INTEGER

  - FLOAT
    Adaのデフォルトでは、FLOATデータ型は浮動小数点データのF浮動小数点表現として認識されます。ただし、Adaでは、FLOAT_REPRESENTATION(IEEE_FLOAT)プラグマまたはACS CREATE LIBRARYコマンドまたはSET PRAGMAコマンドを使用して、デフォルトをオーバーライドし、FLOATがIEEE S浮動小数点表現で表されるよう指定することもできます。このデフォルトは、インストール時にもオーバーライドできます。SQLでは、FLOATデータ型のデフォルトのF浮動小数点をオーバーライドしたかどうかは認識されません。FLOATのデフォルトをオーバーライドすると、Adaのコンパイル時にエラーが発生します。このようなコンパイル時のエラーは、SQL$PREコマンドとともに/FLOAT=IEEE_FLOAT修飾子を使用することによって解消できます。
    FLOATデータ型のあいまいさによる問題を回避するには、SYSTEMパッケージのF_FLOATデータ型およびIEEE_SINGLE_FLOATデータ型を使用します。

  - LONG_FLOAT
    Adaのデフォルトでは、LONG_FLOATデータ型は浮動小数点データのG浮動小数点表現として認識されます。ただし、Adaでは、FLOAT_REPRESENTATION(IEEE_FLOAT)プラグマまたはACS CREATE LIBRARYコマンドまたはSET PRAGMAコマンドを使用して、デフォルトをオーバーライドし、LONG_FLOATがIEEE S浮動小数点表現で表されるよう指定することもできます。このデフォルトは、インストール時にもオーバーライドできます。また、FLOAT_REPRESENTATIONがVAX_FLOAT（デフォルト）である場合、Adaでは、LONG_FLOAT(D_FLOAT)プラグマを指定して、LONG_FLOATデータ型がD浮動小数点形式で表されるよう指定することもできます。SQLでは、LONG_FLOATデータ型のデフォルトのG浮動小数点をオーバーライドしたかどうかは認識されません。LONG_FLOATのデフォルトをオーバーライドすると、Adaのコンパイル時にエラーが発生します。このようなコンパイル時のエラーは、SQL$PREコマンドとともに/FLOAT修飾子を使用して、必要に応じてD_FLOATINGまたはIEEE_FLOATINGを指定することによって解消できます。
    LONG_FLOATデータ型のあいまいさによる問題を回避するには、SYSTEMパッケージのG_FLOATデータ型、D_FLOATデータ型およびIEEE_DOUBLE_FLOATデータ型を使用します。

    注意 /FLOAT修飾子とともに/ADA修飾子を使用する場合、ADAコマンドには/FLOAT修飾子がないため、SQL$PREでは警告（%SQL-W-NOFLOAT）が発行されます。ただし、FLOAT REPRESENTATIONプラグマを使用してデフォルトの浮動小数点形式をオーバーライドする場合、SQL$PREではこのプラグマが認識されないため、/FLOAT修飾子を使用してSQL$PREにこの浮動小数点形式を認識させる必要があります。この警告はそのまま無視してください。SQL$PREでは、IEEE形式がサポートされているのみならず、VAX_FLOATを指定するFLOAT REPRESENTATIONプラグマとD_FLOATを指定するLONG FLOATプラグマの組合せを使用して、64ビットの浮動小数点型用のデフォルトのG_FLOAT形式をオーバーライドすることもできます。この組合せを使用するには、/FLOAT=D_FLOATのSQL$PRE修飾子を指定します。

    次の例は、SQL$PRE/ADA/FLOAT=IEEEで正しく機能する埋込みSQLがあるAdaプログラムを示しています。

        PRAGMA FLOAT REPRESENTATION IEEE_FLOAT;
        WITH SYSTEM; USE SYSTEM;
        WITH STANDARD; USE STANDARD;
        WITH SQL_STANDARD; USE SQL_STANDARD;
        ...
        PROCEDURE TESTIT IS
        EXEC SQL BEGIN DECLARE SECTION;
        KEYFIELD   : STRING(1..10);
        FLOATER    : LONG_FLOAT;           -- package STANDARD
        SQLFLOATER : REAL;                 -- package SQL_STANDARD
        GFLOATER   : G_FLOAT;              -- package SYSTEM
        SFLOATER   : IEEE_SINGLE_FLOAT;    -- package SYSTEM
        TFLOATER   : IEEE_DOUBLE_FLOAT;    -- package SYSTEM
        EXEC SQL END DECLARE SECTION;
        ...
        BEGIN
        ...
        KEYFIELD := "1.0       ";
        EXEC SQL SELECT FLOAT1, FLOAT2 INTO :SQLFLOATER, :GFLOATER
            WHERE KEYFIELD = :KEYFIELD;
        ...
        KEYFIELD := "2.0       ";
        EXEC SQL SELECT FLOAT1, FLOAT2 INTO :SFLOATER, :TFLOATER
            WHERE KEYFIELD = "KEYFIELD;
        ...
        KEYFIELD := "3.0       ";
        EXEC SQL SELECT FLOAT1, FLOAT2 INTO :FLOATER, TFLOATER
            WHERE KEYFIELD = KEYFIELD;

- 日時データ型
  プリコンパイルされたプログラム内の行は、どのような日時データ型が含まれていても変換されます。

  注意 Oracle Rdbには、事前に通知することなく、日時データ型の変換によって生成されたコードをいつでも変更する権利があります。

  - SQL_DATE、SQL_DATE_ANSI、SQL_DATE_VMS

  - SQL_TIME、SQL_TIMESTAMP

  - SQL_INTERVAL (DAY TO SECOND)
    2つの日付または時刻間の差異を示す変数にはこのデータ型を使用します。（サポートされているすべてのINTERVALデータ型は、表4-2を参照してください。）

- SQL definition package
  Adaオブジェクト宣言によって次のデータ型の定義が参照される場合、これらが含まれるパッケージが生成されます。

  - SQL_VARCHAR_n
    データベース内のVARCHAR列とLONG VARCHAR列に対応する変数にはこのデータ型を使用します。ここで、nは、列の定義に指定されている長さです（LONG VARCHAR列の場合は常に16,383文字）。
    SQL_VARCHAR_nが検出されると、2フィールドのAdaレコードが宣言されます。この場合、1つ目のフィールドtには文字列が含まれ、2つ目のフィールドlには文字列の長さを示す整数が含まれます。
    lフィールドを参照して可変文字列の実際の長さを確認し、tフィールドを参照して文字列自体を確認できます。このオンライン・サンプル・プログラムsql_all_datatypes.sqladaからの抜粋は、lフィールドを参照して、SQL_VARCHAR_nフィールドの値がNULLであるかどうかを確認しています。

                .
                .
                .
        -- Variables for main program use
            type ALL_DATATYPES_RECORD_TYPE IS
                record
                .
                .
                .
                    VARCHAR_VAR : sql_varchar_40;
                end record;

                .
                .
                .

        -- The following if statements evaluate the contents of main variables
        -- and then set indicators as appropriate.
                .
                .
                .
            if all_datatypes_record.varchar_var.l = 0 then
                indicator_group(7) := -1; end if;

  - SQLDA_ACCESS
    このデータ型を指定してSQLDA構造体を宣言します。これにより、複数の宣言で使用して複数のSQLDA構造体を宣言できるため、埋込みINCLUDE SQLDA文よりも利点があります。

- CDD_TYPESパッケージのデータ型（WITH CDD_TYPESを指定する必要あり）

  - DATE_TIME_DATATYPE（SQL_TIMESTAMPを使用することを推奨）

  - SHORT_INTEGER_ARRAY（インジケータ配列のみ）

- SYSTEMパッケージのデータ型（WITH SYSTEMを指定する必要あり）

  - D_FLOAT

  - G_FLOAT

  - F_FLOAT

  - IEEE_SINGLE_FLOAT

  - IEEE_DOUBLE_FLOAT

- 配列
  SQL文の構造体を参照するインジケータ配列を宣言するために、単次元配列がサポートされています。配列の要素は、ワード整数（SHORT_INTEGER）として宣言する必要があります。
  文字配列は、型またはサブタイプとしてサポートされていますが、導出された型は参照できません。
  SQLでは、制約のない配列は参照できません。

- 型
  前述のすべてのデータ型に加えて、レコード、導出された型、および配列の型が認識されます。

  - レコードでは、認識された任意の型を参照できます。

  - 導出された型（NEWキーワード）では、認識された任意の型を参照できます。SQLでは、導出された型で範囲制約は使用可能ですが無視されます。

  SQLでは、弁別子を使用する型やアクセス型は参照できません。SQLでは、整数（RANGEキーワード）型、浮動小数点（DIGITSキーワード）型、または固定小数点（DELTAキーワード）型は参照できません。

- サブタイプ
  サブタイプでは、認識された任意の型を参照できます。SQLでは、サブタイプで範囲制約は使用可能ですが無視されます。

- 宣言の式からの代入

- コンテキスト構造体型
  Adaプリコンパイラ用のアプリケーションを書き込む場合、構造体を宣言するのではなく、SQLCONTEXT_RECデータ型の変数を宣言することにより、コンテキスト構造体を宣言する必要があります。SQLCONTEXT_RECデータ型を使用して変数を宣言すると、コンテキスト構造体が生成されます。たとえば、次のコードを使用して変数を宣言します。

      context_struc.sqlcontext_ver := 1;
      context_struc.sqlcontext_tid.sqlcontext_tid_type := 1
      context_struc.sqlcontext_tid.sqlcontext_tid_len := 16;
      context_struc.sqlcontext_tid.sqlcontext_tid_value(1) := 0;
      context_struc.sqlcontext_tid.sqlcontext_tid_value(2) := 0;
      context_struc.sqlcontext_tid.sqlcontext_tid_value(3) := 0;
      context_struc.sqlcontext_tid.sqlcontext_tid_value(4) := 0;
      context_struc.sqlcontext_end := 0;

次の例は、SQL文で参照可能なAda宣言を示しています。

    -- Record with STANDARD, SYSTEM, and SQL package data types:
        type ALL_DATATYPES_RECORD_TYPE IS
            record
                CHAR_VAR : string(1..10);
                SMALLINT_VAR : short_integer;
                INTEGER_VAR : integer;
                REAL_VAR : system.F_float;
                DOUBLE_PREC_VAR : system.G_float;
                BIN_DATE_VAR : sql_date;
                VARCHAR_VAR : sql_varchar_40;
             end record;

        ALL_DATATYPES_RECORD : all_datatypes_record_type;

    -- Derived type (SQL ignores RANGE specification):
    type my_int is new integer range 1..20000;

    -- Record using derived type:
    type p_type is
        record
        pnum : string(1..6);
        pname : string(1..20);
        color : string(1..6);
        weight : my_int;
        city : string(1..20);
        end record;
    p : p_type;

    -- Indicator structure for handling null values:
        type INDICATOR_GROUP_TYPE is array(1..7) of short_integer;
        INDICATOR_GROUP : indicator_group_type := (0,0,0,0,0,0,0);

    -- Indicator arrays:
    IND2 : array (1..5) of short_integer;
    subtype SUB_SHORT_INT is short_integer range -1..2000;
    type MY_SUB_IND_TYPE is array(1..5) of SUB_SHORT_INT;
    IND4 : array(1..5) of SUB_SHORT_INT;
    ind5 : MY_SUB_IND_TYPE;

    -- Character array:
    CHAR1 : array(1..20) of character;

    -- Character array referring to subtype:
    subtype X is character;
    type CHAR2 is array(1..20) of X;
    P : CHAR2;

無効な宣言構文の例は、次のとおりです。各宣言の前にあるコメントは、宣言によって指定された変数や、宣言に依存する変数をSQL文で参照できない理由を示しています。

    -- Enumerated type:
    type ENUM_TYPE is (T1, T2, T3);
    ENUM_TYPE_OBJ : ENUM_TYPE;

    -- Integer type (RANGE allowed only in derived type or subtype):
    type INTEGER_TYPE is range 1..20;
    INTEGER_TYPE_OBJ : INTEGER_TYPE;

    -- Type with DIGITS:
    type FLOAT_TYPE is digits 10;
    FLOAT_TYPE_OBJ : FLOAT_TYPE;

    -- Access type:
    type ACCESS_TYPE is access integer;
    ACCESS_TYPE_OBJ : ACCESS_TYPE;

    -- Discriminants in a record declaration:
    type DISCR(X, Y, Z : integer := (X + 20)/2; W : natural) is
        record
        R1 : array(1..W) of character;
        R2 : integer := X;
        end record;
    DISCR_OBJ : DISCR;

    -- Variant records
    type VAR_REC is
        record
        I : integer;
        case I is
            when 1 =>
                X : integer;
            when (3*j) =>
                Y : integer;
            when others
                case J is
                    when 1 =>
                        Z1 : integer;
                    when 2 =>
                        Z2 : integer;
                end case
        end case
        end record;
    VAR_REC_OBJ : VAR_REC;

    -- Multiple dimensioned array:
    type MULDIM_ARR is array(1..20, 1..20) of integer;
    MULDIM_ARR_OBJ : MULDIM_ARR;

    -- Unconstrained array:
    type UNC_ARRAY is array( integer range <>) of integer;
    UNC_ARRAY_OBJ : UNC_ARRAY;

    -- Unrecognized declaration of array (not SHORT_INT):
    IND4 : array(1..5) of short_short_int;

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

表4-3 SQLデータ型に対するAda宣言
SQLの例 | Adaの例
--- | ---
CHAR(10) | STR1 : SQL_STANDARD.CHAR(1..10);1
VARCHAR(80) | STR2 : SQLVARCHAR_80;2
LONG VARCHAR | STR3 : SQLVARCHAR_16383;2
TINYINT(2) TINYINT | サポートなし NUM1 : SHORT_SHORT_INTEGER;
SMALLINT(2) SMALLINT | サポートなし NUM1 : SQL_STANDARD.SMALLINT;1
INTEGER(2) INTEGER | サポートなし NUM2 : SQL_STANDARD.INT;1
BIGINT(2) BIGINT | サポートなし サポートなし
FLOAT(6) FLOAT(25) | NUM4 : SQL_STANDARD.REAL;1 NUM4 : SQL_STANDARD.DOUBLE_PRECISION;1
REAL | NUM5 : SQL_STANDARD.REAL;1
DOUBLE PRECISION | NUM6 : SQL_STANDARD.DOUBLE_PRECISION;1
DATE | DATENUM1 : SQL_DATE;
DATE ANSI | DATENUM2 : SQL_DATE_ANSI;
DATE VMS | DATENUM3 : SQL_DATE_VMS;
TIME | DATENUM4 : SQL_TIME(0);
TIMESTAMP | DATENUM5 : SQL_TIMESTAMP(2);
INTERVAL DAY TO HOUR | DATENUM6 : SQL_INTERVAL (DAY TO HOUR);3
LIST OF BYTE VARYING | STR4 : SQL_STANDARD.CHAR(1..8);4

1ソース・ファイルでは、SQL$STANDARD.ADAパッケージを明示的に使用してこれらの型を指定する必要があります。
2$SQL_VARCHARデータ型は、処理時に生成されるパッケージの一部として定義されます。
3表4-2は、サポートされているすべてのINTERVALデータ型を示しています。
4この例は、8バイトの文字列を使用して、セグメント化された文字列識別子、リストの先頭要素のポインタを取得する方法を示しています。このリストの個別要素の値を取得するには、CHARデータ型またはVARCHARデータ型のホスト言語変数を使用します。

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

次の例は、サンプル・プログラムsql_all_datatypes.sqladaをプリコンパイル、リンクおよび実行するコマンドを示しています。