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

戻る
戻る
 
次へ
次へ
 

例2: SQLCAサポートの効果の表示


#include <stdio.h>
#include <sql_rdb_headers.h>

exec sql
    declare alias filename 'db$:mf_personnel';

exec sql
    include SQLCA;

char * s1 = "begin insert into work_status values (?, ?, ?);\
             select count(*) into ? from work_status; end";

void main ()
{
int i;
SQLCA.SQLERRD[2] = SQLCA.SQLERRD[3] = 1;
exec sql
    prepare stmt from :s1;
if (SQLCA.SQLCODE != 0) sql_signal ();
printf( "SQLCA:\n  SQLCODE:    %9d\n", SQLCA.SQLCODE);
for (i = 0; i < 6; i++)
    printf( "  SQLERRD[%d]: %9d\n", i, SQLCA.SQLERRD[i]);
}

次の結果は、3つの入力引数と1つの出力引数があることを示しています。


SQLCA:
  SQLCODE:            0
  SQLERRD[0]:         0
  SQLERRD[1]:         0
  SQLERRD[2]:         1
  SQLERRD[3]:         3
  SQLERRD[4]:         0
  SQLERRD[5]:         0


PRINT文

対話型SQLでメッセージを表示します。

環境

PRINT文は、対話型SQLで使用できます。

形式




引数

AS name

出力文のヘッダーに表示される名前を変更します。デフォルトでは、リテラル値のヘッダー名は空白となり、変数ではその名前がヘッダーに使用されます。ヘッダーに空白または小文字を含める必要がある場合は、SET QUOTING RULESまたはSET DIALECTを使用してデリミタ付き識別子を有効にします。

EDIT USING edit-string

EDIT USING domain-name

変数またはリテラル値の書式設定時に使用する編集文字列を割り当てます。ドメイン名を指定すると、そのドメインのEDIT STRINGが使用されます。

この句は対話型SQLでのみ使用できます。

literal

コマンド・プロシージャの実行中にユーザーに表示する値を指定します。文字リテラルを一重引用符で囲みます。

variable

指定した変数の内容を出力します。

使用方法


例1: コマンド・プロシージャのリテラルの表示

コマンド・プロシージャ内の次のPRINT文は、コマンド・プロシージャの実行中に'Creating trigger definitions for the database'を表示します。


SQL> -- Trigger definition statements are next.
SQL> PRINT 'Creating trigger definitions for the database';
SQL> CREATE TRIGGER EMPLOYEE_ID_CASCADE_DELETE
   .
   .
   .

例2: 変数の表示

次のPRINT文は変数の定義を表示します。


SQL> DECLARE :X CHAR(10);
SQL> BEGIN
cont>   SET :X = 'Active';
cont> END;
SQL> PRINT :X;
 X
 Active


QUIT文

対話型SQLセッションを停止し、変更内容をロールバックしてDCLプロンプトに戻ります。

環境

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

形式



使用方法

QUIT文およびEXIT文はともに対話型SQLセッションを終了します。QUIT文は、セッション中に加えた変更を自動的にロールバックします。EXIT文の場合、デフォルトではセッション中に加えた変更をコミットします。EXIT文では変更内容をロールバックできますが、QUIT文では変更内容をコミットできません。

RELEASE文

準備された動的SQL文で使用されたリソースをすべて解放し、準備された文の再実行を防止できます。

RELEASE文は動的SQL文です。動的SQLでは、プリコンパイルされたプログラムのソース・コードまたはSQLモジュール言語プロシージャの一部であるSQL文とは対照的に、プログラムは実行時にSQL文を受け入れたり生成できます。プリコンパイルされたSQLまたはSQLモジュール言語文とは異なり、動的に実行されるこのようなSQL文は、必ずしもプログラムのソース・コードの一部ではありませんが、プログラムの実行中に生成できます。動的SQLは、プログラムが処理する必要のあるSQL文のタイプを予測できない場合に便利です。


環境

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


形式



引数

statement-name

statement-id-parameter

準備された文の名前またはPREPARE文で割り当てられた文の名前を指定します。

1セットの動的SQL文(PREPARE、DESCRIBE、EXECUTE、動的DECLARE CURSOR)によって、任意の数の動的に実行される文を処理できます。

実行対象の文を識別するためにパラメータまたはコンパイル時の文名を指定できます。パラメータを指定すると、SQLは実行時にプログラムの識別子を設定します。SQLが返した文識別子を含むには、整数パラメータを使用します。SQLに渡す文の名前を含むには、文字列パラメータを使用します。パラメータを使用する場合は、準備された文を参照する文(DESCRIBE、EXECUTE、DECLARE CURSOR)でも、明示的な文名のかわりにこれらのパラメータを使用する必要があります。


使用方法


例1: RELEASE文の使用

COBOLプログラムの次の部分は、RELEASE文を使用して、準備されたSELECT文のリソースを解放する方法を示しています。


        .
        .
        .

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
        .
        .
        .

        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.
        PERFORM CHECK.
        EXEC SQL RELEASE STMT END-EXEC.
        PERFORM CHECK.
        .
        .
        .


RENAME文

データベース管理者によるデータベース・オブジェクトの名前の変更を可能にします。この新しい名前は、問合せやルーチンによる参照の他に、他のデータ定義文での参照にも使用できます。

注意

RENAME文を使用するには、データベースでシノニムが有効になっていることが必要な場合があります。ALTER文、CREATE文およびIMPORT DATABASE文のSYNONYMS ARE ENABLED句を参照してください。


環境

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


形式



引数

newname

このオブジェクトの新しい名前です。このオブジェクト型のデータベースにすでに存在する名前およびシノニムの名前は使用できません。例外は、シノニムがoldnameオブジェクトを参照している場合です。詳細は、「使用方法」を参照してください。

これがRENAME TABLE、RENAME VIEWまたはRENAME SEQUENCEの場合は、既存の表、順序またはビューの名前をnewnameにできません。

oldname

データベース内の既存のオブジェクトの名前です。オブジェクト型のキーワードが指定されている場合は、その型のオブジェクトが存在している必要があります。この名前には、指定された型のオブジェクトのシノニムも使用されます。

使用方法


例1: RENAME文のためのデータベースの準備

ほとんどのオブジェクトのRENAME文では、シノニムが有効である必要があります。この例は、シノニムを必要とするオブジェクトでRENAMEを試行した場合のエラー・レポートを示しています。


SQL> attach 'filename personnel_sql';
SQL> show table
User tables in database with filename personnel_sql
     CANDIDATES
     COLLEGES
     CURRENT_INFO                    A view.
     CURRENT_JOB                     A view.
     CURRENT_SALARY                  A view.
     DEGREES
     DEPARTMENTS
     EMPLOYEES
     JOBS
     JOB_HISTORY
     RESUMES
     SALARY_HISTORY
     WORK_STATUS
SQL> rename table EMPLOYEES to COMPANY_STAFF;
%RDB-E-NO_META_UPDATE, metadata update failed
-RDMS-E-UNSSYNONYM, this database does not have synonyms enabled
SQL> disconnect all;
SQL> alter database filename personnel_sql synonyms are enabled;

例2: PERSONNELデータベースの表の名前変更

この例では、EMPLOYEES表の名前を変更します。SHOW TABLE文は、表の古い名前によるシノニムと新しい名前を示します。


SQL> attach 'filename personnel_sql';
SQL> rename table EMPLOYEES to COMPANY_STAFF;
SQL> show table
User tables in database with filename personnel_sql
     CANDIDATES
     COLLEGES
     COMPANY_STAFF
     CURRENT_INFO                    A view.
     CURRENT_JOB                     A view.
     CURRENT_SALARY                  A view.
     DEGREES
     DEPARTMENTS
     JOBS
     JOB_HISTORY
     RESUMES
     SALARY_HISTORY
     WORK_STATUS
     EMPLOYEES                       A synonym for table COMPANY_STAFF
SQL> select last_name from COMPANY_STAFF where employee_id = '00164';
 LAST_NAME
 Toliver
1 row selected
SQL>

例3: 元の名前への名前変更

この例は、元の名前への名前変更によってシノニムが新規に作成され、表の新規名と同じ名前の古いシノニムが削除されることを示します。


SQL> rename table COMPANY_STAFF to EMPLOYEES;
SQL> show table
User tables in database with filename personnel_sql
     CANDIDATES
     COLLEGES
     CURRENT_INFO                    A view.
     CURRENT_JOB                     A view.
     CURRENT_SALARY                  A view.
     DEGREES
     DEPARTMENTS
     EMPLOYEES
     JOBS
     JOB_HISTORY
     RESUMES
     SALARY_HISTORY
     WORK_STATUS
     COMPANY_STAFF                   A synonym for table EMPLOYEES
SQL>

例4: 同じオブジェクト・クラスまたはシノニムで使用されている名前への変更不可

RENAMEコマンドでは、オブジェクトの同じクラスまたはシノニムによって使用されている名前を新しい名前に指定できません。特定の表、ビューおよび順序は、同じネームスペースを共有しています。


SQL> rename view CURRENT_INFO to CURRENT_SALARY;
%SQL-F-REL_EXISTS, Table CURRENT_SALARY already exists in this database or
schema
SQL> create sequence CURRENT_INFORMATION;
SQL> rename view CURRENT_INFO to CURRENT_INFORMATION;
%RDB-E-NO_META_UPDATE, metadata update failed
-RDMS-E-SEQEXTS, there is another sequence named "CURRENT_INFORMATION" in
this database
-RDMS-F-RELNOTCHG, relation CURRENT_INFO has not been changed


REPEAT制御文

終了条件が満たされるまで、複合ループ内の1つ以上のSQL文を繰り返し実行します。

環境

複数文プロシージャの複合文のREPEAT制御文は、次の環境で使用できます。


形式



引数

beginning-label:

名前をREPEAT文に割り当てます。LEAVE文とともに開始ラベルを使用することにより、繰返しループの終了を制御できます。名前付き繰返しループはラベル付き繰返しループ文と呼ばれます。開始ラベルは、そのラベルが含まれているプロシージャ内で一意である必要があります。

END REPEAT ending-label

制御ループの終了をマークします。オプションの終了ラベルを含める場合、その終了ラベルは対応する開始ラベルと正確に一致している必要があります。終了ラベルは、そのラベルが含まれているプロシージャ内で一意である必要があります。

オプションのending-label引数により、特に複雑な複数文プロシージャ・ブロックの場合に、複数文プロシージャが読みやすくなります。

REPEAT compound-use-statement

UNTIL条件句で指定された終了条件が満たされるまで、SQL文のブロックを繰り返し実行します。

UNTIL predicate

SQLのREPEAT ... UNTILブロック(SQLの複合文と総称される)内の埋込みSQL文を実行できる回数を制御する条件を指定します。複合文を1回実行すると、UNTIL条件が評価されます。条件がFALSEまたはNULL(不明)に評価され、エラー例外が発生していない場合、複合文が再度実行されます。検索条件がFALSEまたはNULLに評価されるたびに、REPEAT文により複合文が実行されます。UNTIL条件がTRUEに評価されると、複合文は無視され、END REPEAT文の後の文に制御が渡されます。

使用方法

REPEAT文では、ループ本体が1回以上実行されます。


例1: REPEAT文を使用した現在のディレクトリのファイルの表示


SQL> SET VERIFY;
SQL> ATTACH 'FILE SCRATCH';
SQL> CREATE DOMAIN file_name  VARCHAR(255);
SQL>  CREATE PROCEDURE find_file
cont>    (IN :FILESPEC file_name BY DESCRIPTOR,
cont>     INOUT :RESULTANT_FILESPEC file_name BY DESCRIPTOR,
cont>     INOUT :CONTEXT INTEGER BY REFERENCE);
cont> EXTERNAL NAME LIB$FIND_FILE
cont> LOCATION 'SYS$LIBRARY:LIBRTL.EXE'
cont> LANGUAGE GENERAL
cont> PARAMETER STYLE GENERAL
cont> COMMENT IS
cont>    'DCL HELP: LIB$FIND_FILE '
cont>     / 'The Find File routine is called with a wildcard  file'
cont>      / 'specification for  which   it   searches.    LIB$FIND_FILE '
SQL> CREATE PROCEDURE Find_file_end
cont>    (IN :CONTEXT INTEGER BY REFERENCE);
cont> EXTERNAL
cont>    NAME LIB$FIND_FILE_END
cont>     LOCATION 'SYS$LIBRARY:LIBRTL.EXE'
cont>     LANGUAGE GENERAL
cont>    PARAMETER STYLE GENERAL
cont> COMMENT IS
cont>   'DCL HELP: LIB$FIND_FILE_END '
cont>    / 'The End of Find File routine is called once'
cont>    / 'after each  sequence  of '
cont>    / 'calls to LIB$FIND_FILE. LIB$FIND_FILE_END deallocates'
cont>    / 'any saved Record Management Service (RMS) context and'
cont>    / 'deallocates the virtual memory used to hold the'
cont>    / 'allocated context block.';
SQL> SET FLAGS 'TRACE';
SQL> BEGIN
cont> -- This procedure performs a call to an external
cont> -- routine to list files located in the current
cont> -- default directory
cont> DECLARE :done, :context integer = 0;
cont> DECLARE :search_string FILE_NAME = '*.SQL';
cont> DECLARE :file_spec FILE_NAME;
cont> REPEAT
cont>     -- Ask the OpenVMS routine for the next name
cont>     CALL find_file (:search_string, :file_spec, :context);
cont>     IF POSITION ('*' in :file_spec) = 0
cont>        AND POSITION ('%' in :file_spec) = 0
cont>        AND POSITION ('...' in :file_spec) = 0
cont>     THEN
cont>         -- Display the name (there are no wildcards)
cont>         TRACE :file_spec;
cont>     ELSE
cont>        SET :done = 1;
cont>    END IF;
cont>   -- Exit when we have no more file names
cont>   UNTIL :done = 1
cont> END REPEAT;
cont> -- Clean up search context
cont> CALL find_file_end (:context);
cont> END;
~Xt: RDBVMS:[USER.V71]CREATE_ROLES.SQL;1
~Xt: RDBVMS:[USER.V71]TEST.SQL;1
SQL>