ヘッダーをスキップ

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

戻る | 次へ |

## 4.4.7 サポートされているPL/I変数宣言

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

- 宣言
  宣言には、次のPL/Iデータ型のみ含めることができます。

  - CHARACTER
    CHARACTERは、CHARとして省略できます。

  - CHARACTER VARYING
    CHARACTER VARYINGは、CHAR VARとして省略できます。

  - 日時データ型（これらのデータ型は、表4-2を参照。）

  - TINYINT
    TINYINTは、FIXED BINARY(7)です。

  - FIXED BINARY、FIXED DECIMAL
    BINARYはBINとして省略でき、DECIMALはDECとして省略できます。FIXED BINARY宣言では、スケール変更係数は許可されていません。

  - FLOAT BINARY、FLOAT DECIMAL

  - SQL_DATE、SQL_DATE_ANSI、SQL_DATE_VMS

  - SQL_TIME、SQL_TIMESTAMP

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

  - DECIMALデータ型は、FIXEDに変換されます。

  - NUMERICデータ型は、PACKEDに変換されます。

- 記憶域クラス属性
  任意の記憶域クラス属性（BASED、AUTOMATIC、DEFINED、STATIC、変数、EXTERNALおよびINTERNAL）を使用できます。BASED属性宣言には、位置参照を含める必要があります。

- INITIAL属性

- 構造体
  構造体は、制限なしで使用できます。

- 配列
  配列は、インジケータ配列の宣言でのみ使用できます。インジケータ配列要素には任意のデータ型を使用できますが、INTEGER変数として宣言することをお薦めします。
  多次元配列項目はサポートされていません。構造体の配列はサポートされていません。それ自体が配列であるグループ内の配列はサポートされていません。動的サイズの配列はサポートされていません。

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

    /* SQL will accept:
    */
    DECLARE 1 E, (3 QE1, 3 QE2, 3 QE3) CHAR(10);

    DCL P FIXED BIN(10), L FLOAT(53) BIN, K DECIMAL(10,2) FIXED;

    DCL N VAR CHAR(10) INITIAL('XXXX');

    DCL 1 B_P_REC   BASED(ADDR(S_P_REC)),
            2       PNUM    CHAR(6),
            2       PNAME   CHAR(20),
            2       WEIGHT  FIXED BIN(31),
            2       COLOR   CHAR(6),
            2       CITY    CHAR(10);

    DCL D_IND_VEC (5) FIXED BIN(15) DEFINED(S_IND_VEC);

    /* SQL will not accept:
    */
    DCL A1 (1:10, 1:10) FIXED BIN(15);  /* multidimension table */

    DCL B PICTURE '++++,+++,++9';       /* picture clauses */

    DCL D1 BIT_FIELD(32);               /* bit fields */

    DCL E1 FILE;                        /* file declarations */

    DCL 1 F (10), 2 F1   FIXED BIN(15); /* arrays of structures */

    DCL J POINTER;                      /* pointer declarations */

    DCL K AREA(512);                    /* area declarations */

    DCL L OFFSET(K);                    /* offset declarations */

    DCL M FIXED BIN(31)                 /* external value declarations */
            EXTERNAL VALUE GLOBALREF;

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

表4-10 SQLデータ型に対するPL/I宣言
SQLの例 | PL/Iの例
--- | ---
CHAR(10) | DCL STR1 CHAR(10);
VARCHAR(80) | DCL STR2 CHAR(80) VAR;
LONG VARCHAR | DCL STR3 CHAR(16383) VAR;
TINYINT | DCL NUM1 BIN FIXED(7);1
SMALLINT | DCL NUM1 BIN FIXED(15);1
INTEGER | DCL NUM2 BIN FIXED(31);1
BIGINT | DCL NUM3 BYTE_FIELD(8);または DCL NUM3 FIXED DEC(18);2
FLOAT(6) FLOAT(25) | DCL NUM4 BIN FLOAT(24); DCL NUM4 BIN FLOAT(53);
REAL | DCL NUM4 BIN FLOAT(24);
DOUBLE PRECISION | DCL NUM4 BIN FLOAT(53);
DATE | DCL P_DATE (SQL_DATE);
DATE ANSI | DCL P_DATE_A SQL_DATE_ANSI;
DATE VMS | DCL P_DATE_V SQL_DATE_VMS;
TIME | DCL P_TIME SQL_TIME(0);
TIMESTAMP | DCL P_TIMESTAMP SQL_TIMESTAMP(2);
INTERVAL DAY TO HOUR | DCL P_INTER1 SQL_INTERVAL (DAY TO HOUR);3
LIST OF BYTE VARYING | DCL STR4 CHAR(8);4

1PL/Iでは、固定バイナリ・データ型でスケール変更係数はサポートされません。スケール変更係数を指定するには、PL/Iパック10進数データ型を使用します。
2PL/Iでは、BIGINTはサポートされていません。BIGINTを他の言語に渡すには、BYTE_FIELD(8)を使用します。PL/IでBIGINTを処理するには、FIXED DEC(18)（パック10進数）を使用します。
3サポートされているすべてのINTERVALデータ型は、表4-2を参照してください。
4PL/Iでは、LIST OF BYTE VARYINGデータ型はサポートしていません。この例は、8バイトの文字列を使用して、セグメント化された文字列識別子、リストの先頭要素のポインタを取得する方法を示しています。（必要な場合、かわりにBIGINTを使用することもできます。）このリストの個別要素の値を取得するには、CHARデータ型またはVARCHARデータ型のホスト言語変数を使用します。

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