ヘッダーをスキップ

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

戻る | 次へ |

表3-7は、SQL仮パラメータに対するCOBOL宣言を示しています。

表3-7 SQL仮パラメータのデータ型に対するCOBOL宣言
SQL仮パラメータのデータ型 | 互換性のあるCOBOLのパラメータ宣言7
--- | ---
CHAR(10) | 01 STR1 PICTURE X(10).
CHAR(10) CHARACTER SET KANJI | 01 STR1 PICTURE X(20).6
NCHAR(10) | 01 STR1 PICTURE X(10).6
VARCHAR(80) |
    01 STR2.

     49 STR2L PICTURE S9(4) COMP.

     49 STR2C PICTURE X(80).
VARCHAR(80) CHARACTER SET KANJI |
    01 STR2 CHARACTER SET KANJI.

     49 STR2L PICTURE S9(4) COMP.

     49 STR2C PICTURE X(160).
    6
NCHAR VARYING(80) |
    01 STR2.

     49 STR2L PICTURE S9(4) COMP.

     49 STR2C PICTURE X(80).
    6
LONG VARCHAR |
    01 STR3.

     49 STR3L PICTURE S9(4) COMP.

     49 STR3C PICTURE X(16383).
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.
DECIMAL(18,2) DECIMAL(18) | 01 NUM4 PIC S9(16)V99 COMP3. 01 NUM4 PIC S9(18) COMP3.
NUMERIC(18,2) NUMERIC(18) | 01 NUM5 PIC S9(16)V99 SIGN LEADING SEPARATE. 01 NUM5 PIC S9(18) SIGN LEADING SEPARATE.
FLOAT(6) FLOAT(25) | 01 NUM6 COMP-1.1 01 NUM6 COMP-2.1
REAL | 01 NUM7 COMP-1.1
DOUBLE PRECISION | 01 NUM8 COMP-2.1
DATE | DATEの解釈に依存2
DATE ANSI | 同等のOpenVMSなし3
DATE VMS |
    type SQL_DATE_VMS is

     record

     10 : integer;

     11 : integer;

     end record;
TIME | 同等のOpenVMSなし3
TIMESTAMP | 同等のOpenVMSなし3
INTERVAL DAY TO SECOND | 同等のOpenVMSなし3、4
LIST OF BYTE VARYING | サポートなし5

1SQLモジュール・プロセッサのコマンドラインの/FLOAT修飾子または/[NO]G_FLOAT修飾子は、COBOLのコンパイルのそれと一致している必要があります。
2SQLでは、SQLモジュール・ファイル内でDEFAULT DATE FORMAT SQL92を指定して定義環境を変更しないかぎり、修飾されていないDATEデータ型はデフォルトでDATE VMSとして解釈されます。
3DATE VMS以外では、日時データ型の長さと書式はOracle Rdbで使用するために予約されています。ホスト・プログラムでは、表4-2に示されているデータ型を使用してください。
4INTERVALデータ型には、他に12個の修飾子の組合せがあります。表2-9を参照してください。
5モジュール言語では、仮パラメータのデータ型としてLIST OF BYTE VARYINGはサポートされません。ただし、クワッドワードまたは8バイトの文字列を使用して、セグメント化された文字列識別子、リストの先頭要素のポインタを取得できます。リストの個別要素の値を取得するには、CHARデータ型またはVARCHARデータ型のホスト言語変数を使用します。
6文字長およびモジュール言語の詳細は、第3.3節を参照してください。
7セッションのデフォルト・キャラクタ・セットおよび各国語キャラクタ・セットがDEC_MCSであると想定しています。

表3-8は、SQL仮パラメータに対するFORTRAN宣言を示しています。

表3-8 SQL仮パラメータのデータ型に対するFORTRAN宣言
SQL仮パラメータのデータ型 | 互換性のあるFORTRANのパラメータ宣言9
--- | ---
CHAR(10) | CHARACTER*10 STR1
CHAR(10) CHARACTER SET KANJI | CHARACTER*20 STR18
NCHAR(10) | CHARACTER*10 STR18
VARCHAR(80) | サポートなし1
VARCHAR(80) CHARACTER SET KANJI | サポートなし1
NCHAR VARYING(80) | サポートなし1
LONG VARCHAR | サポートなし1
TINYINT(2) TINYINT | サポートなし1 LOGICAL*12
SMALLINT(2) SMALLINT | サポートなし1 INTEGER*2 NUM1
INTEGER(2) INTEGER | サポートなし1 INTEGER*4 NUM2
BIGINT(2) BIGINT | サポートなし1 サポートなし1
DECIMAL(18,2) DECIMAL(18) | サポートなし1 サポートなし1
NUMERIC(18,2) NUMERIC(18) | サポートなし1 サポートなし1
FLOAT(6) FLOAT(25) | REAL*4 NUM43 DOUBLE PRECISION NUM43
REAL | REAL*4 NUM53
DOUBLE PRECISION | DOUBLE PRECISION NUM63
DATE | DATEの解釈に依存4
DATE ANSI | 同等のOpenVMSなし5
DATE VMS | STRUCTURE /SQL_DATE_VMS/ INTEGER*4 L0 INTEGER*4 L1 END STRUCTURE
TIME | 同等のOpenVMSなし5
TIMESTAMP | 同等のOpenVMSなし5
INTERVAL DAY TO SECOND | 同等のOpenVMSなし5、6
LIST OF BYTE VARYING | サポートなし7

1FORTRANでは、可変文字、スケール付き整数または数値の各データ型はサポートされません。これらのデータ型で定義されている列をデータベースから取得するには、FORTRANでサポートされているデータ型で仮パラメータを宣言し、SQLモジュール・プロシージャ文でこれらの仮パラメータを参照します。SQLで列内のデータが仮パラメータのデータ型に変換されます。
2FORTRANでは、BYTEはLOGICAL*1のシノニムであり、Oracle RdbのSQLインタフェースによって解析されます。
3SQLモジュール・プロセッサのコマンドラインの/FLOAT修飾子または/[NO]G_FLOAT修飾子は、FORTRANのコンパイルのそれと一致している必要があります。
4SQLでは、SQLモジュール・ファイル内でDEFAULT DATE FORMAT SQL92を指定して定義環境を変更しないかぎり、修飾されていないDATEデータ型はデフォルトでDATE VMSとして解釈されます。
5DATE VMS以外では、日時データ型の長さと書式はOracle Rdbで使用するために予約されています。ホスト・プログラムでは、表4-2に示されているデータ型を使用してください。
6INTERVALデータ型には、他に12個の修飾子の組合せがあります。表2-9を参照してください。
7モジュール言語では、仮パラメータのデータ型としてLIST OF BYTE VARYINGはサポートされません。ただし、8バイトの文字列を使用して、セグメント化された文字列（リスト）識別子、リストの先頭要素のポインタを取得できます。リストの個別要素の値を取得するには、CHARデータ型のホスト言語変数を使用します。
8文字長およびモジュール言語の詳細は、第3.3節を参照してください。
9セッションのデフォルト・キャラクタ・セットおよび各国語キャラクタ・セットがDEC_MCSであると想定しています。

表3-9は、SQL仮パラメータに対するPascal宣言を示しています。

表3-9 SQL仮パラメータのデータ型に対するPascal宣言
SQL仮パラメータのデータ型 | 互換性のあるPascalのパラメータ宣言11
--- | ---
CHAR(10) | VAR STR1 : PACKED ARRAY [1..10] OF CHAR;
CHAR(10) CHARACTER SET KANJI | VAR STR1 : PACKED ARRAY [1..20] OF CHAR;10
NCHAR(10) | VAR STR1 : PACKED ARRAY [1..10] OF CHAR;10
VARCHAR(80) | VAR STR2 : VARYING [80] OF CHAR;
VARCHAR(80) CHARACTER SET KANJI | VAR STR2 : VARYING [160] OF CHAR;10
NCHAR VARYING(80) | VAR STR2 : VARYING [80] OF CHAR;10
LONG VARCHAR | VAR STR3 : VARYING [16383] OF CHAR;
TINYINT(2) TINYINT | サポートなし1 VAR NUM1 : [BYTE] --128..127;
SMALLINT(2) SMALLINT | サポートなし1 VAR NUM1 : [WORD] --32768..32767;
INTEGER(2) INTEGER | サポートなし1 VAR NUM2 : [LONG] --MAXINT..+MAXINT;
BIGINT(2) BIGINT | サポートなし1 サポートなし1
DECIMAL(18,2) DECIMAL(18) | サポートなし1 サポートなし1
NUMERIC(18,2) NUMERIC(18) | サポートなし1 サポートなし1
FLOAT(6) | VAR NUM4 : SINGLE2 VAR NUM4 : F_FLOAT3、4 VAR NUM4 : S_FLOAT5
FLOAT(25) | VAR NUM4 : DOUBLE2 VAR NUM4 : G_FLOAT3 VAR NUM4 : D_FLOAT4 VAR NUM4 : T_FLOAT5
REAL | VAR NUM4 : SINGLE2 VAR NUM4 : F_FLOAT3、4 VAR NUM4 : S_FLOAT5
DOUBLE PRECISION | VAR NUM4 : DOUBLE2 VAR NUM4 : G_FLOAT3 VAR NUM4 : D_FLOAT4 VAR NUM4 : T_FLOAT5
DATE | DATEの解釈に依存6
DATE ANSI | 同等のOpenVMSなし7
DATE VMS | SQL_DATE_VMS = RECORD L0 : INTEGER; L1 : INTEGER; END;
TIME | 同等のOpenVMSなし7
TIMESTAMP | 同等のOpenVMSなし7
INTERVAL DAY TO SECOND | 同等のOpenVMSなし7、8
LIST OF BYTE VARYING | サポートなし9

1Pascalでは、パック10進数、数値またはスケール付き整数の各データ型はサポートされません。これらのデータ型で定義されている列をデータベースから取得するには、Pascalでサポートされているデータ型で仮パラメータを宣言し、SQLモジュール・プロシージャ文でこれらの仮パラメータを参照します。SQLで列内のデータが仮パラメータのデータ型に変換されます。
2SQLモジュール・プロセッサのコマンドラインの/FLOAT修飾子または/[NO]G_FLOAT修飾子が、Pascalのコンパイルのそれと一致している必要がある場合。
3SQLモジュール・プロセッサのコマンドラインで/FLOAT=G_FLOATが指定されている場合。
4SQLモジュール・プロセッサのコマンドラインで/FLOAT=D_FLOATが指定されている場合。
5SQLモジュール・プロセッサのコマンドラインで/FLOAT=IEEE_FLOATが指定されている場合。
6SQLでは、SQLモジュール・ファイル内でDEFAULT DATE FORMAT SQL92を指定して定義環境を変更しないかぎり、修飾されていないDATEデータ型はデフォルトでDATE VMSとして解釈されます。
7DATE VMS以外では、日時データ型の長さと書式はOracle Rdbで使用するために予約されています。ホスト・プログラムでは、表4-2に示されているデータ型を使用してください。
8INTERVALデータ型には、他に12個の修飾子の組合せがあります。表2-9を参照してください。
9モジュール言語では、仮パラメータのデータ型としてLIST OF BYTE VARYINGはサポートされません。ただし、8バイトの文字列を使用して、セグメント化された文字列識別子、リストの先頭要素のポインタを取得できます。リストの個別要素の値を取得するには、CHARデータ型またはVARCHARデータ型のホスト言語変数を使用します。
10文字長およびモジュール言語の詳細は、第3.3節を参照してください。
11セッションのデフォルト・キャラクタ・セットおよび各国語キャラクタ・セットがDEC_MCSであると想定しています。

表3-10は、SQL仮パラメータに対するPL/I宣言を示しています。

表3-10 SQL仮パラメータのデータ型に対するPL/I宣言
SQL仮パラメータのデータ型 | 互換性のあるPL/Iのパラメータ宣言9
--- | ---
CHAR(10) | DCL STR1 CHAR(10);
CHAR(10) CHARACTER SET KANJI | DCL STR1 CHAR(20);8
NCHAR(10) | DCL STR1 CHAR(10);8
VARCHAR(80) | DCL STR2 CHAR(80) VAR;
VARCHAR(80) CHARACTER SET KANJI | DCL STR2 CHAR(160) VAR;8
NCHAR VARYING(80) | DCL STR2 CHAR(80) VAR;8
LONG VARCHAR | DCL STR3 CHAR(16383) VAR;
TINYINT(2) TINYINT | サポートなし1 FIXED BINARY(7);
SMALLINT(2) SMALLINT | サポートなし1 DCL NUM1 BIN FIXED(15);
INTEGER(2) INTEGER | サポートなし1 DCL NUM2 BIN FIXED(31);
BIGINT(2) BIGINT | サポートなし1 サポートなし1
DECIMAL(4) DECIMAL(18,2) | DCL NUM3 FIXED(4) DEC; DCL NUM3 FIXED(18,2) DEC;
NUMERIC(2) NUMERIC(18,2) | DCL NUM4 PIC 'S(4)9';2 DCL NUM4 PIC 'S(16)9V99';2
FLOAT(6) FLOAT(25) | DCL NUM5 BIN FLOAT(24);3 DCL NUM5 BIN FLOAT(53);3
REAL | DCL NUM5 BIN FLOAT(24);3
DOUBLE PRECISION | DCL NUM5 BIN FLOAT(53);3
DATE | DATEの解釈に依存4
DATE ANSI | 同等のOpenVMSなし5
DATE VMS | DECLARE 1 SQL_DATE_VMS, 2 L0 BIN FIXED(31); 2 L1 BIN FIXED(31);
TIME | 同等のOpenVMSなし5
TIMESTAMP | 同等のOpenVMSなし5
INTERVAL DAY TO SECOND | 同等のOpenVMSなし5、6
LIST OF BYTE VARYING | サポートなし7

1PL/Iでは、スケール付き整数またはBIGINTの各データ型はサポートされません。これらのデータ型で定義されている列をデータベースから取得するには、PL/Iでサポートされているデータ型で仮パラメータを宣言し、SQLモジュール・プロシージャ文でこれらの仮パラメータを参照します。SQLで列内のデータが仮パラメータのデータ型に変換されます。
2このデータ型は記述子で渡さないでください。
3SQLモジュール・プロセッサのコマンドラインの/FLOAT修飾子または/[NO]G_FLOAT修飾子は、PL/Iのコンパイルのそれと一致している必要があります。
4SQLでは、SQLモジュール・ファイル内でDEFAULT DATE FORMAT SQL92を指定して定義環境を変更しないかぎり、修飾されていないDATEデータ型はデフォルトでDATE VMSとして解釈されます。
5DATE VMS以外では、日時データ型の長さと書式はOracle Rdbで使用するために予約されています。ホスト・プログラムでは、表4-2に示されているデータ型を使用してください。
6INTERVALデータ型には、他に12個の修飾子の組合せがあります。表2-9を参照してください。
7モジュール言語では、仮パラメータのデータ型としてLIST OF BYTE VARYINGはサポートされません。ただし、8バイトの文字列を使用して、セグメント化された文字列（リスト）識別子、リストの先頭要素のポインタを取得できます。リストの個別要素の値を取得するには、CHARデータ型またはVARCHARデータ型のホスト言語変数を使用します。
8文字長およびモジュール言語の詳細は、第3.3節を参照してください。
9セッションのデフォルト・キャラクタ・セットおよび各国語キャラクタ・セットがDEC_MCSであると想定しています。

## 使用方法

> SQLモジュール言語では、次の3種類のAdaパッケージがサポートされています。

> - SQL_STANDARD

> - SQL_SQLCODE

> - SQL_SQLCA

> SQL_SQLCAパッケージでは、SQLCA構造体が定義されています。また、SQL_SQLCODEパッケージでは、SQLCODE値のリテラル定義が含まれています。

> 注意 Adaのリテラルには、ASCII文字のみが含まれている必要があります。

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

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

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

> - CHAR

> - SMALLINT

> - INT

> - REAL

> - DOUBLE_PRECISION

> - SQLCODE_TYPE

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

> Adaをソース言語として使用してSQLモジュールをコンパイルすると、Oracle RdbではSQLモジュール内のすべてのプロシージャに対するAda宣言を含むAdaパッケージが生成されます。各ルーチンの宣言の一部は、各パラメータの宣言です。これらのパラメータは、SQL_STANDARDパッケージ内のデータ型を使用して宣言されます。

> 生成されたパッケージを利用するには、ホスト言語プログラムでAdaのWITH句を使用する必要があります。生成されたパッケージは、SQLモジュールと同じ名前です。

> 生成されたパッケージを利用するには、ホスト言語プログラムをコンパイルする前にSQLモジュールをコンパイルする必要があります。ACS LINKを使用するときは、まずAdaソース・プログラムのオブジェクト・ファイル、次にSQLモジュールによって作成されたオブジェクト・ファイル、その後にSQL$USERなど、他に必要なライブラリを指定します。

## 例

> 例1: 生成されたAdaパッケージを使用したSQLモジュール・ファイルのコンパイル

>     MODULE MY_MODULE (1)
>     LANGUAGE ADA
>     AUTHORIZATION RDB$DBHANDLE

>     DECLARE ONE SCHEMA FILENAME personnel_one
>     DECLARE TWO SCHEMA FILENAME personnel_two
>        .
>        .
>        .
>     PROCEDURE COUNT
>         SQLCODE
>         THE_COUNT INT;

>         SELECT COUNT(DISTINCT EMPLOYEE_ID)
>             INTO THE_COUNT
>             FROM ONE.EMPLOYEES;