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

戻る
戻る
 
次へ
次へ
 

前のプログラムの一部によりコールされたSQLモジュール言語プロシージャは、次のとおりです。


   .
   .
   .
-------------------------------------------------------------------------------
-- Procedure Section
-------------------------------------------------------------------------------

-- This procedure prepares a statement for dynamic execution from the string
-- passed to it.  It also writes information about the number and data type of
-- any select list items in the statement to an SQLDA2 (specifically,
-- the sqlda_out SQLDA2 passed to the procedure by the calling program).
--

PROCEDURE PREPARE_STMT
    SQLCA
    :DYN_STMT_ID      INTEGER
    :STMT            CHAR(1024);

    PREPARE :DYN_STMT_ID FROM :STMT;

-- This procedure writes information to an SQLDA (specifically,
-- the sqlda_in SQLDA passed to the procedure by the calling program)
-- about the number and data type of any parameter markers in the
-- prepared dynamic statement.  Note that SELECT statements may also
-- have parameter markers.

PROCEDURE DESCRIBE_SELECT
    SQLCA
    :DYN_STMT_ID    INTEGER
    SQLDA;

    DESCRIBE :DYN_STMT_ID OUTPUT INTO SQLDA;

PROCEDURE DESCRIBE_PARM
    SQLCA
    :DYN_STMT_ID INTEGER
    SQLDA;

    DESCRIBE :DYN_STMT_ID INPUT INTO SQLDA;


-- This procedure dynamically executes a non-SELECT statement.
-- SELECT statements are processed by DECLARE CURSOR, OPEN CURSOR,
-- and FETCH statements.
--
-- The EXECUTE statement specifies an SQLDA2 (specifically,
-- the sqlda_in SQLDA2 passed to the procedure by the calling program)
-- as the source of addresses for any parameter markers in the dynamic
-- statement.
--
-- The EXECUTE statement with the USING DESCRIPTOR clause
-- also handles statement strings that contain no parameter markers.
-- If a statement string contains no parameter markers, SQL sets
-- the SQLD field of the SQLDA2 to zero.

PROCEDURE EXECUTE_STMT
    SQLCA
    :DYN_STMT_ID INTEGER
    SQLDA;

    EXECUTE :DYN_STMT_ID USING DESCRIPTOR SQLDA;
   .
   .
   .


EXECUTE IMMEDIATE文

SQL文を動的に準備、実行および解放します。

EXECUTE IMMEDIATE文は動的SQL文です。動的SQLでは、コンパイルの前にプログラムに埋め込む必要があるプリコンパイルされたSQL文とは対照的に、プログラムで実行時にSQL文を受け入れるか、生成できます。埋込みSQL文とは異なり、動的に実行されるこのようなSQL文は、必ずしもプログラムのソース・コードの一部ではありませんが、プログラムの実行時に作成できます。動的SQLは、プログラムが処理する必要のあるSQL文のタイプを予測できない場合に便利です。

EXECUTE IMMEDIATE文にはパラメータ・マーカーを組み込めません。ただし、文がそのような制限を満たし、1回のみ動的に実行する場合は、PREPARE文とEXECUTE文のかわりにEXECUTE IMMEDIATE文を使用します。


環境

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


形式



引数

statement-string

parameter

準備して動的に実行するSQL文を指定します。文の文字列を、一重引用符で囲んで文字列リテラルに直接指定するか、文の文字列を組み込んだパラメータに指定できます。

直接指定、パラメータによる指定のいずれの場合も、文の文字列はSELECT文以外の動的な実行SQL文である文字列である必要があります。文の形式は埋込みSQLと同じです。ただし、文字列をEXEC SQLで始めるか、文の終了記号で終了する必要はありません。


例1: EXECUTE IMMEDIATE文を指定したINSERT文の実行

このCOBOLプログラムは、EXECUTE IMMEDIATE文を使用した動的INSERT文の準備および実行を示します。この例をEXECUTE文の例と比較します(「EXECUTE文」を参照)。EXECUTE文では、パラメータ・マーカーのあるINSERT文を使用して挿入操作の結果を表示します。


IDENTIFICATION DIVISION.
PROGRAM-ID.   EXECUTE_IMMEDIATE_EXAMPLE.
*
* Illustrate EXECUTE_IMMEDIATE with a dynamic INSERT statement.
*
DATA DIVISION.

WORKING-STORAGE SECTION.

* Variable for DECLARE SCHEMA:
01 FILESPEC     PIC X(20).

* Variables to hold values for
* storage in EMPLOYEES:
01 EMP_ID       PIC X(5).
01 FNAME        PIC X(10).
01 MID_INIT     PIC X(1).
01 LNAME        PIC X(14).
01 ADDR_1       PIC X(25).
01 ADDR_2       PIC X(25).
01 CITY         PIC X(20).
01 STATE        PIC X(2).
01 P_CODE       PIC X(5).
01 SEX          PIC X(1).
01 BDATE        PIC S9(11)V9(7) COMP.
01 S_CODE       PIC X(1).

* Indicator variables for retrieving
* the entire row, including columns we
* do not assign values to, from
* the EMPLOYEES table:
01 EMP_ID_IND   PIC S9(4) COMP.
01 FNAME_IND    PIC S9(4) COMP.
01 MID_INIT_IND PIC S9(4) COMP.
01 LNAME_IND    PIC S9(4) COMP.
01 ADDR_1_IND   PIC S9(4) COMP.
01 ADDR_2_IND   PIC S9(4) COMP.
01 CITY_IND     PIC S9(4) COMP.
01 STATE_IND    PIC S9(4) COMP.
01 P_CODE_IND   PIC S9(4) COMP.
01 SEX_IND      PIC S9(4) COMP.
01 BDATE_IND    PIC S9(4) COMP.
01 S_CODE_IND   PIC S9(4) COMP.

* Buffer for error handling:
01 BUFFER       PIC X(300).
01 LEN          PIC S9(4) USAGE IS COMP.

* 01 disp_sqlcode       pic s9(9) sign leading separate.

* Load definition for SQL Communication Area (SQLCA):
EXEC SQL        INCLUDE SQLCA END-EXEC.

********************************************************************
*
*               P R O C E D U R E    D I V I S I O N
*
********************************************************************
PROCEDURE DIVISION.
START-UP.

* Assign value to FILESPEC:
        MOVE "SQL$DATABASE" TO FILESPEC

* Declare the schema:
        EXEC SQL DECLARE SCHEMA RUNTIME FILENAME :FILESPEC
        END-EXEC

*               Use an EXECUTE IMMEDIATE statement
*               to execute an INSERT statement:
            EXEC SQL EXECUTE IMMEDIATE
            "INSERT INTO EMPLOYEES
-               "(EMPLOYEE_ID,FIRST_NAME,LAST_NAME,CITY)
-               "VALUES ('99999','Les','Warton','Hudson')"
            END-EXEC
            PERFORM CHECK.

        PERFORM FETCHES.

EXEC SQL EXECUTE IMMEDIATE 'ROLLBACK' END-EXEC.
        PERFORM CHECK.

        DISPLAY "Rolled back changes.  All done.".

CLEAR-IT-EXIT.
        EXIT PROGRAM.

FETCHES.
        DISPLAY "Here's the row we stored:"

        EXEC SQL PREPARE STMT FROM
        'SELECT * FROM EMPLOYEES WHERE EMPLOYEE_ID = "99999"'
        END-EXEC
        EXEC SQL DECLARE C CURSOR FOR STMT END-EXEC

        EXEC SQL OPEN C END-EXEC
*       Clear values in host language
*       variables in case new values
*       from the table are null:
        MOVE SPACES TO EMP_ID
        MOVE SPACES TO FNAME
        MOVE SPACES TO MID_INIT
        MOVE SPACES TO LNAME
        MOVE SPACES TO ADDR_1
        MOVE SPACES TO ADDR_2
        MOVE SPACES TO CITY
        MOVE SPACES TO STATE
        MOVE SPACES TO P_CODE
        MOVE SPACES TO SEX
        MOVE ZERO TO BDATE
        MOVE SPACES TO S_CODE

        EXEC SQL FETCH C INTO
                :EMP_ID:EMP_ID_IND,
                :LNAME:LNAME_IND,
                :FNAME:FNAME_IND,
                :MID_INIT:MID_INIT_IND,
                :ADDR_1:ADDR_1_IND,
                :ADDR_2:ADDR_2_IND,
                :CITY:CITY_IND,
                :STATE:STATE_IND,
                :P_CODE:P_CODE_IND,
                :SEX:SEX_IND,
                :BDATE:BDATE_IND,
                :S_CODE:S_CODE_IND
        END-EXEC

        DISPLAY EMP_ID," ",
                FNAME," ",
                MID_INIT," ",
                LNAME," ",
                ADDR_1," ",
                ADDR_2," ",
                CITY," ",
                STATE," ",
                P_CODE," ",
                SEX," ",
                BDATE," ",
                S_CODE.

        PERFORM CHECK.
        EXEC SQL CLOSE C END-EXEC.

CHECK.
        IF SQLCODE NOT = 100 AND SQLCODE NOT = 0
                DISPLAY "Error: SQLCODE = ", SQLCODE
            CALL "SQL$GET_ERROR_TEXT" USING
                BY DESCRIPTOR BUFFER,
                BY REFERENCE LEN
            DISPLAY BUFFER(1:LEN)
        END-IF.


EXIT文

対話型SQLセッションを停止し、オペレーティング・システムのプロンプトに戻ります。デフォルトでは、EXIT文はセッション中に行われた変更をコミットします。

環境

EXIT文は、対話型SQLでのみ発行できます。

形式



使用方法


EXPORT文

中間形式でデータベースのコピーを作成します。IMPORT文を使用して、EXPORT文によって作成された交換ファイル(ファイル拡張子.rbr)からOracle Rdbデータベースを再構築します。

IMPORT文とともにEXPORT文を使用すると、他の方法では不可能なOracle Rdbデータベースの変更を実行できます。EXPORT文は、データベースを.rbrファイルにアンロードします。IMPORT文は、ALTER文で可能な変更と不可能な変更の両方を加えて、データベースを再作成します。詳細は、「IMPORT文」を参照してください。


環境

EXPORT文は、対話型SQLでのみ使用できます。

形式




引数

ALIAS alias

FILENAME file-spec

PATHNAME path-name

.rbrファイルに書き込むソース・データベース・ファイルを指定します。

FORWARD_REFERENCES

NO FORWARD_REFERENCES

EXPORT文ではデータベース内のすべての依存関係を分析して、どのファンクションおよびプロシージャが他の定義によって参照されているかを判断します。IMPORTでは厳密な順序で各オブジェクト・タイプを定義するため、その定義の前に一部の定義を使用する場合があります。たとえば、表はモジュールより先に定義されますが、表はモジュールからSQLファンクションをコールすることがあります。FORWARD_REFERENCESオプションでは、EXPORTで最初にこれらのルーチンを交換ファイルに保存して、その使用前にIMPORTで宣言できるように要求します。詳細は、「DECLAREルーチン文」を参照してください。

デフォルトはFORWARD_REFERENCESです。Oracle Rdb 7.1.0.4より前のバージョンで交換ファイルを使用する場合は、NO FORWARD_REFERENCESオプションを使用してこの情報を除外してください。

INTO file-spec

EXPORT文で作成した.rbrファイルの名前を指定します。オプションでファイル仕様にデバイスおよびディレクトリ仕様を組み込ます。

literal-user-auth

データベース(特にリモート・データベース)へのアクセスに使用するユーザー名およびパスワードを指定します。

このリテラルにより、EXPORT文でユーザー名およびパスワードの情報を明示的に指定できます。

USER 'username'

データベース・システムで権限チェックに使用されるオペレーティング・システムのユーザー名を指定する文字列リテラルを定義します。

USING 'password'

USER句で指定されているユーザー名に対するユーザーのパスワードを指定する文字列リテラルを定義します。

WITH DATA

WITH NO DATA

EXPORT文で作成する.rbrファイルに、データベースに含まれるデータとメタデータを含めるか、またはメタデータのみを含めるかを指定します。デフォルトはWITH DATAです。

WITH NO DATAオプションを指定すると、EXPORT文によりメタデータがソース・データベースから.rbrファイルにコピーされますが、データはコピーされません。IMPORT文を使用すると、メタデータがソース・データベースのものと同一の空のデータベースが生成されます。

注意

WITH NO DATAオプションは、Oracle CDD/リポジトリ・データベース(CDD$DATABASE.RDB)と互換性がありません。CDD$DATABASE.RDBをエクスポートしようとすると、SQLでは、WITH NO DATAオプションがOracle CDD/リポジトリ・データベースでは無効であることを示すエラー・メッセージが表示されます。

WITH EXTENSIONS

WITH NO EXTENSIONS

EXPORT文で作成する.rbrファイルに、Oracle Rdbバージョン3.0以上のデータベース・システムとのみ互換性のある拡張子を組み込むかどうかを指定します。デフォルトはWITH EXTENSIONSです。

WITH NO EXTENSIONSオプションを指定すると、その結果生成される交換ファイル(.rbr)には、ドメイン、表および索引の定義のみが含まれます。索引はソート索引に変換された、マイナス記憶域マップです。ドメインに対して次の変換が行われます。

また、NULL値は列の欠落値に変換されるか、デフォルトで欠落値固有のデータ型になります。たとえば、NULLの数値はゼロに置換され、NULLの文字値は空白に置換されます。

WITH NO EXTENSIONSオプションを指定すると、Oracle Rdbデータベースの多数の機能がエクスポートされません。たとえば、記憶域、記憶域マップ、トリガー、照合順番、ファンクション、モジュールおよびアウトラインは、WITH NO EXTENSIONS引数を指定するとバックアップされません。

注意

WITH NO EXTENSIONSオプションは、Oracle CDD/リポジトリ・データベース(CDD$DATABASE.RDB)と互換性がありません。CDD$DATABASE.RDBデータベースをエクスポートしようとすると、SQLでは、WITH NO EXTENSIONSオプションがOracle CDD/リポジトリ・データベースでは無効であることを示すエラー・メッセージが表示されます。


使用方法


FETCH文

結果表の次の行にカーソルを進め、その行から値を取得します。リスト・カーソルとともに使用すると、FETCH文によりカーソルがリスト内の指定された位置に配置され、そのリストの一部を取得します。FETCH文がプリコンパイルされたホスト言語プログラムに埋め込まれると、行からの値がホスト・パラメータに割り当てられます。対話型SQLでは、FETCH文によって端末画面に行の値が表示されます。

環境

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


形式




引数

cursor-name

parameter

行を取得するカーソルの名前を指定します。カーソル名によって参照されるカーソルが動的DECLARE CURSOR文で実行時に宣言された場合、パラメータを使用します。動的DECLARE CURSOR文のカーソル名に使用されるパラメータを指定します。

FETCH文が動的カーソルにアクセスしている場合のみ、パラメータを使用してカーソル名を参照できます。

fetch-orientation-clause FROM

フェッチするリスト・カーソルの特定のセグメントを指定します。これらのオプションは、DECLARE CURSOR文でSCROLLオプションを指定した場合にのみ指定できます。選択肢には次のものがあります。

INTO parameter

INTO qualified-parameter

INTO variable

パラメータ、修飾パラメータ(ホスト構造体)または変数のリストを指定して、カーソルの結果表の行からSQLが取得する値を受け取ります。リスト内のパラメータまたは変数の数は、行内の値の数と同じである必要があります。(パラメータのいずれかがホスト構造体である場合、SQLでは、INTO句のホスト・パラメータの数を行内の値の数と比較する際、その構造体のパラメータの数をカウントします。)

パラメータおよび変数のデータ型は、該当するカーソル行の列の値と互換性を持つ必要があります。

simple-value-expression

正または負の整数、数値モジュール言語、ホスト言語パラメータのいずれかを指定します。

USING DESCRIPTOR descriptor-name

SQLDAに対応している記述子の名前を指定します。INCLUDE文を使用してプログラムにSQLDAを挿入する場合、記述子名にはそのままSQLDAが使用されます。

SQLDAは、動的SQLでのみ使用されるホスト言語変数のコレクションです。FETCH文では、SQLDAは、行の値を保存するためにSQLで使用されるパラメータの数を指します。パラメータの数は、行の列数と一致している必要があります。

パラメータのデータ型は、該当するカーソル行の列の値と互換性を持つ必要があります。


使用方法