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

戻る
戻る
 
次へ
次へ
 

この例では、EXPORT文とIMPORT文を使用して、オンラインのサンプル・データベース(人事データベース)を複数ファイルのデータベースに変換します。


SQL> export database
cont>     filename PERSONNEL
cont>     into PERS;
SQL>
SQL> import database
cont>     from PERS
cont>     filename MF_PERSONNEL
cont>     default storage area MFP0
cont>     create storage area MFP0
cont>         filename MFP0_DEFAULT
cont>         page format is UNIFORM
cont>     create storage area MFP1
cont>         filename MFP1
cont>     create storage area MFP2
cont>         filename MFP2
cont>     create storage map EMPLOYEES_MAP
cont>         for EMPLOYEES
cont>         store randomly across (MFP1, MFP2);
SQL>
SQL> show storage area;
Storage Areas in database with filename MF_PERSONNEL
     MFP0                            Default storage area
     MFP1
     MFP2
     RDB$SYSTEM                      List storage area.

この例では、記憶域RDB$SYSTEMが暗黙的に作成されています。データベース管理者は、このIMPORT文の例にCREATE STORAGE AREA RDB$SYSTEM句を追加して、RDB$SYSTEM領域の名前、場所および領域割当てを制御できます。

例2: ANSI/ISOスタイルの権限を使用して作成したデータベースのインポート

この例では、ACLSスタイルの保護を使用して最初に作成したデータベースをインポートし、ANSIスタイルの保護を設定した新規データベースを作成します。


SQL> import database
cont>     from PERS
cont>     alias NEW_PERS
cont>     filename MF_PERSONNEL
cont>     protection is ANSI
cont> ;
SQL> show protection on database NEW_PERS;
Protection on Alias NEW_PERS
[DEV,SMITH]:
  With Grant Option:        SELECT,INSERT,UPDATE,DELETE,SHOW,CREATE,ALTER,DROP,
                            DBCTRL,OPERATOR,DBADM,SECURITY,DISTRIBTRAN
  Without Grant Option:     NONE
[*,*]:
  With Grant Option:        NONE
  Without Grant Option:     NONE
SQL>
SQL> show protection on table NEW_PERS.EMPLOYEES;
Protection on Table NEW_PERS.EMPLOYEES
[DEV,SMITH]:
  With Grant Option:        SELECT,INSERT,UPDATE,DELETE,SHOW,CREATE,ALTER,DROP,
                            DBCTRL,REFERENCES
  Without Grant Option:     NONE
[*,*]:
  With Grant Option:        NONE
  Without Grant Option:     NONE

例3: データベースのインポートと統計の表示

この例ではデータベースをインポートし、TRACEオプションを使用してDIO統計、CPU統計およびPAGE FAULT統計を表示します。


SQL> IMPORT DATABASE FROM personnel.rbr
cont>  FILENAME personnel_new.rdb
cont>  TRACE
cont>  CREATE INDEX LOCAL_INDEX ON jobs (job_code);
IMPORTing STORAGE AREA: RDB$SYSTEM
IMPORTing table COLLEGES
Completed COLLEGES. DIO = 103, CPU = 0:00:00.89, FAULTS = 169
Starting INDEX definition COLL_COLLEGE_CODE
Completed COLL_COLLEGE_CODE. DIO = 25, CPU = 0:00:00.24, FAULTS = 26
IMPORTing table DEGREES
Completed DEGREES. DIO = 96, CPU = 0:00:01.15, FAULTS = 9
Starting INDEX definition DEG_COLLEGE_CODE
Completed DEG_COLLEGE_CODE. DIO = 27, CPU = 0:00:00.36, FAULTS = 1
Starting INDEX definition DEG_EMP_ID
Completed DEG_EMP_ID. DIO = 39, CPU = 0:00:00.49, FAULTS = 2
IMPORTing table DEPARTMENTS
Completed DEPARTMENTS. DIO = 99, CPU = 0:00:00.70, FAULTS = 3
IMPORTing table EMPLOYEES
Completed EMPLOYEES. DIO = 182, CPU = 0:00:01.60, FAULTS = 21
   .
   .
   .
Starting CONSTRAINT definition SH_EMPLOYEE_ID_IN_EMP
Completed SH_EMPLOYEE_ID_IN_EMP. DIO = 48, CPU = 0:00:00.56, FAULTS = 2
Starting CONSTRAINT definition WS_STATUS_CODE_DOM_NOT_NULL
Completed WS_STATUS_CODE_DOM_NOT_NULL. DIO = 36, CPU = 0:00:00.23, FAULTS = 0
Completed import. DIO = 3530, CPU = 0:00:32.97, FAULTS = 2031
SQL>

例4: インポート操作中の順序スロットの予約


SQL> IMPORT DATABASE FROM MF_PERSONNEL.RBR
cont> FILENAME 'mf_personnel.rdb' BANNER
cont> RESERVE 64 SEQUENCES;
   .
   .
   .
Unused Sequences were 32 now are 64
IMPORTing STORAGE AREA: RDB$SYSTEM
IMPORTing STORAGE AREA: DEPARTMENTS
IMPORTing STORAGE AREA: EMPIDS_LOW

例5: BANNERオプションの指定


SQL> import data from x file mf_personnel BANNER;
Exported by Oracle Rdb X7.1-201 Import/Export utility
A component of Oracle Rdb SQL X7.1-201
Previous name was mf_personnel
It was logically exported on 29-MAY-2003 12:32
Multischema mode is DISABLED
Database NUMBER OF USERS is 50
Database NUMBER OF CLUSTER NODES is 16
Database NUMBER OF DBR BUFFERS is 20
Database SNAPSHOT is ENABLED
Database SNAPSHOT is IMMEDIATE
Database JOURNAL ALLOCATION is 512
Database JOURNAL EXTENSION is 512
Database BUFFER SIZE is 6 blocks
Database NUMBER OF BUFFERS is 20
Adjustable Lock Granularity is Enabled Count is 3
Database global buffering is DISABLED
Database number of global buffers is 250
Number of global buffers per user is 5
Database global buffer page transfer is via DISK
Journal fast commit is DISABLED
Journal fast commit checkpoint interval is 0 blocks
Journal fast commit checkpoint time is 0 seconds
Commit to journal optimization is Disabled
Journal fast commit TRANSACTION INTERVAL is 256
LOCK TIMEOUT is 0 seconds
Statistics Collection is ENABLED
Unused Storage Areas are: 0
System Index Compression is DISABLED
Journal was Disabled
Unused Journals are: 1
Journal Backup Server was:   Manual
Journal Log Server was:      Manual
Journal Overwrite was:       Disabled
Journal shutdown minutes was 60
Asynchronous Prefetch is ENABLED
Async prefetch depth buffers is 5
Asynchronous Batch Write is ENABLED
Async batch write clean buffers is 5
Async batch write max buffers is 4
Lock Partitioning is DISABLED
Incremental Backup Scan Optim uses SPAM pages
Unused Cache Slots are: 1
Workload Collection is DISABLED
Cardinality Collection is ENABLED
Metadata Changes are ENABLED
Row Cache is DISABLED
Detected Asynchronous Prefetch is ENABLED
Detected Asynchronous Prefetch Depth Buffers is 4
Detected Asynchronous Prefetch Threshold Buffers is 4
Open is Automatic, Wait period is 0 minutes
Shared Memory is PROCESS
Unused Sequences are: 32
The Transaction Mode(s) Enabled are:
     ALL
IMPORTing STORAGE AREA: RDB$SYSTEM
IMPORTing STORAGE AREA: DEPARTMENTS
IMPORTing STORAGE AREA: EMPIDS_LOW
IMPORTing STORAGE AREA: EMPIDS_MID
IMPORTing STORAGE AREA: EMPIDS_OVER
IMPORTing STORAGE AREA: EMP_INFO
IMPORTing STORAGE AREA: JOBS
IMPORTing STORAGE AREA: MF_PERS_SEGSTR
IMPORTing STORAGE AREA: SALARY_HISTORY
IMPORTing table CANDIDATES
IMPORTing table COLLEGES
IMPORTing table DEGREES
IMPORTing table DEPARTMENTS
IMPORTing table EMPLOYEES
IMPORTing table JOBS
IMPORTing table JOB_HISTORY
IMPORTing table RESUMES
IMPORTing table SALARY_HISTORY
IMPORTing table WORK_STATUS
IMPORTing view CURRENT_SALARY
IMPORTing view CURRENT_JOB
IMPORTing view CURRENT_INFO

例6: COMMIT EVERYオプションの使用


SQL> import database
cont>     from 'TEST$DB_SOURCE:MF_PERSONNEL'
cont>     filename 'MF_PERSONNEL'
cont>
cont>     commit every 10 rows
cont>
cont>     create storage area DEPARTMENTS
cont>         filename 'DEPARTMENTS'
cont>         page format is mixed
cont>         snapshot filename 'DEPARTMENTS'
cont>     create storage area EMPIDS_LOW
cont>         filename 'EMPIDS_LOW'
cont>         page format is mixed
cont>         snapshot filename 'EMPIDS_LOW'
cont>     create storage area EMPIDS_MID
cont>         filename 'EMPIDS_MID'
cont>         page format is mixed
cont>         snapshot filename 'EMPIDS_MID'
cont>     create storage area EMPIDS_OVER
cont>         filename 'EMPIDS_OVER'
cont>         page format is mixed
cont>         snapshot filename 'EMPIDS_OVER'
   .
   .
   .
cont> ; ! end of import
Definition of STORAGE AREA RDB$SYSTEM overridden
Definition of STORAGE AREA MF_PERS_SEGSTR overridden
Definition of STORAGE AREA EMPIDS_LOW overridden
Definition of STORAGE AREA EMPIDS_MID overridden
Definition of STORAGE AREA EMPIDS_OVER overridden
Definition of STORAGE AREA DEPARTMENTS overridden
Definition of STORAGE AREA SALARY_HISTORY overridden
Definition of STORAGE AREA JOBS overridden
Definition of STORAGE AREA EMP_INFO overridden
COMMIT EVERY ignored for table EMPLOYEES due to PLACEMENT VIA INDEX processing
COMMIT EVERY ignored for table JOB_HISTORY due to PLACEMENT VIA INDEX processing
SQL>


INCLUDE文

プリコンパイルされたホスト言語プログラムに宣言またはコードを挿入します。INCLUDE文を使用して、次の宣言またはコードを挿入できます。


環境

INCLUDE文は、プリコンパイルされたホスト言語プログラムでのみ使用できます。プログラムではINCLUDE SQLCA文を使用するか、SQLCODE変数を明示的に宣言する必要があります。INCLUDE文のその他の形式はオプションです(「使用方法」を参照)。

形式



引数

AS name

リポジトリのレコードの構造体名をオーバーライドする名前を指定します。デフォルトでは、SQLプリコンパイラはリポジトリ・レコード名から構造体名を取得します。

EXTERNAL

SQLのプリコンパイルされたCプログラムのSQLCA構造体への外部参照を宣言します。複数のモジュールでINCLUDE SQLCA文を使用している場合は、1つを除くすべてのモジュールにEXTERNALキーワードを追加できます。

複数のイメージでSQLCAを共有しているアプリケーションでは、1つのイメージでSQLCAを定義し、他のすべてのイメージでSQLCAを参照する必要があります。SQLCAの参照にはEXTERNALキーワードを使用します。

file-spec

プログラムに挿入されるソース・コードのファイル仕様です。このファイル仕様は、標準のOpenVMSテキスト・ファイルを参照する必要があります。SQLは、テキスト・ライブラリ(ファイル拡張子.tlb)のINCLUDE文をサポートしていません。次のいずれかの場合は、SQL INCLUDE文を使用してください。

SQL文もSQL文が参照する変数もソース・コードに含まれない場合は、ファイルの組込みにSQL INCLUDE文とホスト言語文のいずれを使用しても同じです。

FIXED

FIXED句とNULL TERMINATED BYTES句は、C言語のCHARフィールドを解釈する方法をプリコンパイラに伝えます。FIXEDを指定すると、プリコンパイラは、リポジトリのCHARフィールドを固定文字列と解釈します。

FROM DICTIONARY path-name

リポジトリ・レコード定義のパス名を指定します。SQLではパス名が文字列リテラルとして処理されるため、パス名を一重引用符で囲む必要があります。SQLではリポジトリ・レコード定義に従ってホスト構造体が宣言され、定義と同じ名前が指定されます。これにより、プログラムの埋込みSQL文はホスト構造体を参照できます。

通常、リポジトリに格納されている表定義と対応するホスト構造体を宣言する便利な方法として、FROM DICTIONARY引数がプログラムで使用されます。

SQLでは、次の場合にのみ表定義がリポジトリに格納されます。

ただし、データベースの一部として定義されたリポジトリ・オブジェクトを含むすべてのCDD$RECORDリポジトリ・オブジェクト型では、ホスト構造体を宣言するためにFROM DICTIONARY引数をプログラムで使用できます。

INCLUDE文を使用すると、プログラムにCDD$RECORDオブジェクトを挿入する同等のホスト言語文よりも多くの機能を利用できます。INCLUDE FROM DICTIONARY文では埋込みSQL文でリポジトリ・レコードを参照できますが、ホスト言語文ではできません。

NULL TERMINATED BYTES

リポジトリのCHARフィールドがヌル文字で終了するように指定します。モジュール・プロセッサは、リポジトリの長さフィールドを文字列のバイト数と解釈します。リポジトリの長さがnの場合、データ・バイト数はn--1、文字列の長さはnバイトです。

つまり、プリコンパイラは文字列の最後の文字はヌル終端文字であると仮定します。したがって、リポジトリで10文字とされるフィールドは、Cプリコンパイラの9文字のSQLフィールドしか保持できません。

文字解釈オプションを指定しない場合は、NULL TERMINATED BYTESがデフォルトとなります。

詳細は、第3章の「NULL TERMINATED CHARACTERS引数」を参照してください。

SQLCA

サポートされているデータベース・システムに固有のSQLCA構造体およびメッセージ・ベクター(RDB$MESSAGE_VECTOR)構造体をSQLがプログラムに挿入するように指定します。SQLCAおよびメッセージ・ベクターはともにエラー条件の処理の方法を備えています。

SQLCAおよびメッセージ・ベクターの詳細は、付録Cを参照してください。

SQLDA

SQLがプログラムにSQLDAを挿入するように指定します。SQLDAは、動的SQLでのみ使用される変数のコレクションです。SQLDAでは、動的SQL文の情報をプログラムに、そのプログラムのホスト言語変数の情報をSQLに提供します。

SQLDA2

SQLがプログラムにSQLDA2を挿入するように指定します。SQLDAと同様に、SQLDA2は、動的SQL文の情報をプログラムに、そのプログラムのホスト言語変数の情報をSQLに提供する変数のコレクションです。列名がパラメータ・マーカーで使用されている動的文や、選択リスト項目が日時データ型または期間データ型の1つである動的文ではSQLDA2を使用する必要があります。

SQLDAおよびSQLDA2の詳細は、付録Dを参照してください。


使用方法


例1: ホスト構造体の宣言の組込み

この単純なCOBOLプログラムでは、サンプルの人事データベースのEMPLOYEES表と対応するホスト構造体を宣言するためにINCLUDE FROM DICTIONARY文が使用されます。リポジトリ・パス名は、データベース・ディレクトリと表名の間のRDB$RELATIONSリポジトリ・ディレクトリを指定します。


IDENTIFICATION DIVISION.
PROGRAM-ID. INCLUDE_FROM_CDD.
*
* Illustrate how to use the INCLUDE FROM DICTIONARY
* statement to declare a host structure corresponding to
* the EMPLOYEES table:
*
DATA DIVISION.
WORKING-STORAGE SECTION.
EXEC SQL WHENEVER SQLERROR GOTO ERR END-EXEC.
*
* Include the SQLCA:
EXEC SQL INCLUDE SQLCA END-EXEC.
*
* Declare the schema:
* (Notice that declaring the alias with the
* FILENAME qualifier would not have precluded
* using the INCLUDE FROM DICTIONARY statement later.)
EXEC SQL DECLARE PERS ALIAS FOR
        PATHNAME 'CDD$DEFAULT.PERSONNEL' END-EXEC.
*
* Create a host structure that corresponds to the
* EMPLOYEES table with the INCLUDE FROM DICTIONARY
* statement.  The path name in the INCLUDE statement
* must specify the RDB$RELATIONS directory before
* the table name:
EXEC SQL INCLUDE FROM DICTIONARY
        'CDD$DEFAULT.PERSONNEL.RDB$RELATIONS.EMPLOYEES'
        END-EXEC.
*
* Declare an indicator structure for the host
* structure created by the INCLUDE FROM DICTIONARY statement:
01 EMPLOYEES-IND.
        02 EMP-IND OCCURS 12 TIMES PIC S9(4) COMP.
EXEC SQL DECLARE E_CURSOR CURSOR
        FOR SELECT * FROM EMPLOYEES  END-EXEC.

PROCEDURE DIVISION.
0.
    DISPLAY "Display rows from EMPLOYEES:".
    EXEC SQL OPEN E_CURSOR END-EXEC.
    EXEC SQL FETCH E_CURSOR INTO :EMPLOYEES:EMP-IND  END-EXEC.
    PERFORM UNTIL SQLCODE NOT = 0
        DISPLAY EMPLOYEE_ID, FIRST_NAME, LAST_NAME
        EXEC SQL FETCH E_CURSOR INTO :EMPLOYEES:EMP-IND END-EXEC
    END-PERFORM.
    EXEC SQL CLOSE E_CURSOR END-EXEC.

    EXEC SQL ROLLBACK END-EXEC.
    EXIT PROGRAM.

ERR.
    DISPLAY "unexpected error ", sqlcode with conversion.
    CALL "SQL$SIGNAL".


例2: SQLCAの組込み

PL/Iプログラムのこの断片はINCLUDE SQLCA文を示しており、エラー処理ルーチンがSQLCAを参照する方法を示しています。

このプログラムは中間結果表のTMPを作成し、人事データベースのEMPLOYEES表をこのTMPにコピーします。次に、プログラムはTMPのカーソルを宣言し、端末の画面にカーソルの行を表示します。


    /* Include the SQLCA: */
    EXEC SQL INCLUDE SQLCA;
    EXEC SQL WHENEVER SQLERROR GOTO ERROR_HANDLER;
    EXEC SQL DECLARE ALIAS FOR FILENAME personnel;
    DCL MANAGER_ID CHAR(5),
        LAST_NAME CHAR(20),
        DEPT_NAME CHAR(20);
    DCL COMMAND_STRING CHAR(256);

    EXEC SQL CREATE TABLE TMP
            (MANAGER_ID CHAR(5),
             LAST_NAME CHAR(20),
             DEPT_NAME CHAR(20));
    COMMAND_STRING =
        'INSERT INTO TMP
                SELECT  E.LAST_NAME,
                        E.FIRST_NAME,
                        D.DEPARTMENT_NAME
                FROM EMPLOYEES E, DEPARTMENTS D
                WHERE E.EMPLOYEE_ID = D.MANAGER_ID';

    EXEC SQL EXECUTE IMMEDIATE :COMMAND_STRING;

    EXEC SQL DECLARE X CURSOR FOR SELECT * FROM TMP;
    EXEC SQL OPEN X;
    EXEC SQL FETCH X INTO MANAGER_ID, LAST_NAME, DEPT_NAME;
    DO WHILE (SQLCODE = 0);
        PUT SKIP EDIT
                (MANAGER_ID, ' ', LAST_NAME, ' ', DEPT_NAME)
                (A,A,A,A,A);
        EXEC SQL FETCH X INTO MANAGER_ID, LAST_NAME, DEPT_NAME;
    END;
    EXEC SQL ROLLBACK;
    PUT SKIP EDIT ('  ALL OK') (A);
    RETURN;

ERROR_HANDLER:

    /* Display the value of the SQLCODE field in the SQLCA: */
    PUT SKIP EDIT ('UNEXPECTED SQLCODE VALUE ', SQLCODE) (A, F(9));
    EXEC SQL WHENEVER SQLERROR CONTINUE;
    EXEC SQL ROLLBACK;


INSERT文

1つ以上の新規行を表またはビューに追加します。INSERT文をカーソルで使用して、LIST OF BYTE VARYINGデータ型の列のセグメントに値を割り当てることもできます。

LIST OF BYTE VARYINGデータ型の列のセグメントに値を割り当てるには、まず同じ行の1つ以上の他の列に値を割り当てる必要があります。これを実行するには、位置付け挿入を使用します。位置付け挿入は、挿入のみの表のカーソルを指定するINSERT文です。このタイプのINSERT文は、後続のリスト・カーソルの適切な行コンテキストを設定してリスト・セグメントに値を割り当てます。

位置付け挿入では、静的カーソル、動的カーソルまたは拡張動的カーソルの名前を指定できます。静的カーソルの名前を指定する場合、そのカーソル名は同じモジュール内のDECLARE CURSOR文でも指定されている必要があります。静的カーソル、動的カーソルおよび拡張動的カーソルの詳細は、「DECLARE CURSOR文」を参照してください。

INSERT文を使用してリスト・セグメントに値を割り当てるときは、次の点に留意してください。


環境

INSERT文は次の環境で使用できます。


形式









引数

column-name

表またはビューの列名のリストを指定します。列のリストは任意の順序で表示できますが、その名前は表またはビューの名前と対応している必要があります。

リストに欠落している列名がある場合は、SQLではその指定されていない列名にNULL値が割り当てられます。ただし、次の列の場合は除きます。

NOT NULL句で定義されている列名をINSERT文から除外することはできません。除外すると、この文は失敗します。

列名のリスト全体を省略すると、表またはビューのすべての列のリストが定義された順序で表示されます。

INSERT文を使用してLIST OF BYTE VARYINGデータ型の列のセグメントに値を割り当てる場合、列名のリストを省略する必要があります。列名は、このコンテキストでは有効ではありません。

CURSOR cursor-name

カーソルの使用時に必要なキーワードです。カーソルを使用して、LIST OF BYTE VARYINGデータ型の列を含む行に値を挿入する必要があります。

DEFAULT

指定した列にその列に対して定義されているデフォルト値が設定されるように強制します(デフォルト値が定義されていない場合はNULL)。

INSERT文でDEFAULT句を使用すると、次のいずれかが適用されます。

DEFAULT VALUES

表内のすべての列にデフォルト値を割り当てるように指定します(列にデフォルト値が設定されていない場合はNULL)。

INTO parameter

指定された値を指定されたパラメータに挿入します。INTOパラメータ句は、対話型SQLでは無効です。

INTO table-name

INTO view-name

行を追加するターゲット表またはターゲット・ビューの名前です。指定された値を指定されたパラメータに挿入します。INTOパラメータ句は、対話型SQLでは無効です。

limit-to-clause

LIMIT TO式の詳細は、第2.8.1項を参照してください。

OPTIMIZE AS query-name

OPTIMIZE AS句は、問合せに名前を割り当てます。この名前の表示を確認するには、SET FLAGS 'STRATEGY'を使用します。

OPTIMIZE FOR

OPTIMIZE FOR句は、選択式を指定する文の優先オプティマイザ計画を指定します。次のオプションを使用できます。

OPTIMIZE USING outline-name

OPTIMIZE USING句は、選択式で使用する問合せアウトラインを明示的に指定します。これには、選択式とアウトラインでアウトラインIDが異なる場合も含まれます。