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

戻る
戻る
 
次へ
次へ
 

次の複合文では、変数を使用してJOBS表の行を更新します。変数MIN_SALへの値の割当てには、SET代入制御文を使用します。


SQL> BEGIN
cont> -- Declare the variable.
cont>      DECLARE :MIN_SAL INTEGER(2);
cont> -- Set the value of the variable.
cont>      SET :MIN_SAL = (SELECT MIN(MINIMUM_SALARY) FROM JOBS) * 1.08;
cont> -- Update the rows in the JOBS table.
cont>      UPDATE JOBS
cont>            SET MINIMUM_SALARY = :MIN_SAL
cont>                WHERE MINIMUM_SALARY < (:MIN_SAL * 1.08);
cont> END;

例2: DEFAULT句の使用

次の例では、DEFAULT句に対して様々な値式を使用する各種の変数宣言を示しています。


SQL> SET FLAGS 'TRACE';
SQL>
SQL> BEGIN
cont>   DECLARE :x INTEGER DEFAULT -1;
cont>   TRACE :x;
cont> END;
~Xt: -1
SQL>
SQL> BEGIN
cont>   DECLARE :x INTEGER DEFAULT NULL;
cont>   TRACE COALESCE (:x, 'NULL');
cont> END;
~Xt: NULL
SQL>
SQL> BEGIN
cont>   DECLARE :x INTEGER DEFAULT (1+1);
cont>   TRACE :x;
cont> END;
~Xt: 2
SQL>
SQL> BEGIN
cont>   DECLARE :x INTEGER DEFAULT (SELECT COUNT(*) FROM EMPLOYEES);
cont>   TRACE :x;
cont> END;
~Xt: 100

例3: DEFAULT句を使用したLOOP文の指定

次の例では、単純な値式をいくつか示します。デフォルト値は、この文を初めて実行したときのみでなく、ループの反復のたびに:yに適用されます。


SQL> BEGIN
cont>     DECLARE :x INTEGER DEFAULT 0;
cont>     WHILE :x < 10
cont>     LOOP
cont>         BEGIN
cont>            DECLARE :y INTEGER DEFAULT 1;
cont>            TRACE :x, :y;
cont>            SET :x = :x + :y;
cont>            SET :y = :y + 1;
cont>         END;
cont>     END LOOP;
cont> END;
~Xt: 0          1
~Xt: 1          1
~Xt: 2          1
~Xt: 3          1
~Xt: 4          1
~Xt: 5          1
~Xt: 6          1
~Xt: 7          1
~Xt: 8          1
~Xt: 9          1

例4: CHECK制約の使用

この例では、CHECK制約を使用して、無効な値がREPEATループに対する制御変数に割り当てられるのを防止します。シングルトンSELECTにより、実際にはローカル変数Pにゼロが返され、変数の検証が失敗します。


SQL> begin
cont> declare :v integer = 0 check (value is not null);
cont> declare :p integer = 1 check (value is not null and value <> 0);
cont>
cont> repeat
cont>     select count(*) into :p
cont>     from employees
cont>     where employee_id = '00000';
cont>     set :v = :v + :p;
cont> until :v > 1000
cont> end repeat;
cont> end;
%RDB-E-NOT_VALID, validation on field P caused operation to fail

例5: WITH HOLD句の使用

次の例は、AUDIT_HISTORY表から古いデータを消去するプロシージャでのWITH HOLD PRESERVE ON COMMIT句の使用を示します。これにより、100行(:MAX_UNIT)ごとにトランザクションがコミットされます。


SQL> declare transaction read only;
SQL> set flags 'TRACE';
SQL> set compound transactions 'internal';
SQL> declare :purge_date date;
SQL> accept :purge_date prompt 'Purge date for AUDIT_HISTORY? ';
Purge date for AUDIT_HISTORY? 1-jan-1989
SQL>
SQL> begin
cont>     with hold preserve on commit
cont> declare :max_unit constant integer = 100;
cont> declare :rc integer = :max_unit;
cont>
cont> set transaction read write;
cont> for :ah
cont>     as table cursor ah_cursor
cont>     for select * from audit_history
cont>     where job_start < :purge_date
cont> do
cont>     delete from audit_history
cont>         where current of ah_cursor;
cont>     if :rc = 0
cont>     then
cont>         commit;
cont>         set :rc = :max_unit;
cont>         set transaction read write;
cont>     else
cont>         set :rc = :rc - 1;
cont>     end if;
cont> end for;
cont> get diagnostics :rc = ROW_COUNT;
cont> commit;
cont> trace 'Processed rows: ', :rc;
cont> end;
~Xt: Processed rows: 1096


CONNECT文

データベース環境および接続を作成し、その関連に対して接続名を指定します。

接続は、一連のカーソル、中間結果表、およびアプリケーションと現在アタッチされているデータベース環境のすべてのモジュールに存在するプロシージャ間の関連を指定します。

データベース環境は、単位としてアタッチまたはデタッチできる1つ以上のデータベースです。接続名により、特定の接続およびデータベース環境が指定されます。プロシージャの実行時に、接続のコンテキスト内で実行されます。

CONNECT文を発行すると、SQLによって、使用しているアプリケーションのすべてのプロシージャから新規の接続と、CONNECT文で指定されたすべてのデータベースから新規の環境が作成されます。新規の環境には、デフォルト環境でアタッチされたデータベースが含まれます。

データベースのデフォルト環境へのアタッチには、次の2つの方法があります。

CONNECT文により、新規の接続と一連のアタッチメントが作成され、その接続に対して暗黙的なSET CONNECTが実行されます。CONNECT文によってトランザクションは作成されませんが、接続にはそれぞれ独自の暗黙的トランザクション・コンテキストが存在します。同じデータベースにアタッチする2つの異なるCONNECT文を発行できますが、各アタッチは一意です。

CONNECT文で接続名を指定すると、後続のSET CONNECT文でその接続名を参照できます。SET CONNECT文を使用すると、問合せのデタッチおよび再コンパイルを行わずに実行したアプリケーションに対して、新規の接続を指定できます。詳細は、「SET CONNECT文」を参照してください。

DISCONNECT文により、データベースからデタッチされ、指定した接続でのトランザクションが終了され、これらのトランザクションの開始以降に実行した変更がすべてロールバックされます。


環境

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


形式
















引数

ALIAS alias

データベースへの特定のアタッチに付ける名前を指定します。接続式で別名を指定すると、プログラムまたは対話型SQL文で複数のデータベースを参照できるようになります。

デフォルトのデータベースのみを参照する場合は、CONNECT文で別名を指定する必要はありません。

別名を指定してもFILENAMEまたはPATHNAMEを指定しない場合は、SQLではDECLARE ALIAS文でデータベースのパス名またはファイル名がデフォルトで使用されます。別名はデフォルト環境の一部である必要があります。

AS runtime-options (1)

アタッチされるデータベースのグループ(環境)とそれらを参照するデータベースおよびリクエスト・ハンドル(接続)間の関連に対する識別子を指定します。

接続名は、使用するアプリケーション内で一意である必要があります。リテラル文字列は、一重引用符で囲みます。次に例を示します。


CONNECT TO 'ALIAS CORP FILENAME corporate_data' AS 'JULY_CORP_DATA'

接続名を指定しない場合は、SQLによって一意の接続名が生成されます。次に例を示します。


SQL> CONNECT TO
cont> 'ATTACH FILENAME mf_personnel';
SQL> SHOW CONNECTIONS
        RDB$DEFAULT_CONNECTION
->      SQL$CONN_00000000

ATTACH attach-expression

デフォルト環境の一部ではない別名を指定します。FILENAME 'attach-spec'、PATHNAME path-name、database-options、およびattach-optionsの詳細は、「ATTACH文」を参照してください。

CATALOG runtime-options (2)

接続内の動的文にデフォルト・カタログを指定します。

動的SQLのパラメータ・マーカー、プリコンパイルされたSQLプログラムのホスト言語変数、SQLモジュールの言語モジュールのパラメータ、または文字列リテラルを指定できます。指定する引数は、実行時に解釈される接続式を含む文字列である必要があります。

db-specification

有効な別名を1つ以上指定します。特定のデータベースを識別する別名は、そのデータベースが現在のアプリケーションのいずれかのモジュールで宣言されているか、ATTACH文によりアタッチされている場合にのみ有効です。ATTACH文は、db-specificationの一部として発行できます。

FILENAME 'attach-spec'

データベースにアクセスするために必要な完全または部分的な情報が含まれる引用符付き文字列です。

FILENAME引数を使用する場合、データベース定義に対する変更は、リポジトリではなくデータベース・システム・ファイルにのみ入力されます。FILENAMEを指定する場合、アプリケーションは実行時にこのファイル名を使用してデータベースにアタッチされます。

node-specおよびfile-specの詳細は、第2.2.8.1項を参照してください。

'string-literal'
parameter-marker host-variable

通常は実行時に、様々なCONNECT句で使用される値を指定します。

literal-user-auth

接続で指定した別名に使用するユーザー名およびパスワードを指定します。この句により、データベース(特にリモート・データベース)へのアクセスが可能になります。

このリテラルにより、CONNECT文で各別名のユーザー名およびパスワードの情報を明示的に指定できます。この句を使用する場合の詳細は、「ATTACH文」を参照してください。

NAMES runtime-options (4)

現在の接続のセッションのデフォルト・キャラクタ・セット、識別子・キャラクタ・セットおよびリテラル・キャラクタ・セットとして使用されるキャラクタ・セット名を指定します。runtime-optionsの値は、第2.1節にリストされたキャラクタ・セットのいずれかである必要があります。

動的SQLのパラメータ・マーカー、プリコンパイルされたSQLプログラムのホスト言語変数、SQLモジュールの言語モジュールのパラメータ、または文字列リテラルを指定できます。指定する引数は、実行時に解釈される接続式を含む文字列である必要があります。

PATHNAME path-name

スキーマ定義のソースを指定するリポジトリのフルパス名または相対パス名です。PATHNAME引数を使用する場合、スキーマ定義に対する変更は、リポジトリとデータベース・システム・ファイルに入力されます。システム上にリポジトリがあり、データ定義文を使用する予定がある場合、Oracle Rdbでは、PATHNAME引数の使用をお薦めします。

指定したパス名は、実行時に別名に関連付けられるパス名に優先します。

実行時にPATHNAMEを指定する場合、アプリケーションはリポジトリから抽出されたデータベース・ファイル名にアタッチされます。

SCHEMA runtime-options (3)

接続内の動的文にスキーマを指定します。

動的SQLのパラメータ・マーカー、プリコンパイルされたSQLプログラムのホスト言語変数、SQLモジュールの言語モジュールのパラメータ、または文字列リテラルを指定できます。指定する引数は、実行時に解釈される接続式を含む文字列である必要があります。

TO connect-string-literal

TO connect-parameter

TO connect-parameter-marker

データベース環境を指定します。動的SQLのパラメータ・マーカー、プリコンパイルされたSQLプログラムのホスト言語変数、SQLモジュールの言語モジュールのパラメータ、または文字列リテラルを指定できます。指定する引数は、実行時に解釈される接続式を含む文字列である必要があります。

USER 'username'

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

USING 'password'

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

user-authentication

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

この句により、CONNECT文でユーザー名およびパスワードの情報を明示的に指定できます。ALIAS句またはATTACH句でユーザー名およびパスワードの情報を指定しない場合、SQLでは指定された各別名のデフォルトとして、この句で指定したユーザー名およびパスワードが使用されます。

この句を使用する場合の詳細は、「ATTACH文」を参照してください。


使用方法


例1: デフォルト接続および他の1つの接続の作成

次の例では、デフォルト接続およびTESTという名前の付いた接続の、異なる2つの接続を持つ1つのデータベースにユーザーがアタッチする方法を示します。


SQL> attach 'alias MIA1 filename MIA_CHAR_SET';
SQL> connect to 'alias MIA1 filename MIA_CHAR_SET' as 'TEST';
SQL> show connections;
        RDB$DEFAULT_CONNECTION
->      TEST
SQL> show connections TEST;
Connection: TEST
Default alias is RDB$DBHANDLE
Default catalog name is RDB$CATALOG
Default schema name is SMITH
Dialect: SQLV40
Default character unit: OCTETS
Keyword Rules: SQLV40
View Rules: SQLV40
Default DATE type: DATE VMS
Quoting Rules: SQLV40
Optimization Level: DEFAULT
Hold Cursors default: WITH HOLD PRESERVE NONE
Quiet commit mode: OFF
Compound transactions mode: EXTERNAL
Default character set is DEC_MCS
National character set is DEC_MCS
Identifier character set is DEC_MCS
Literal character set is DEC_MCS
Display character set is UNSPECIFIED

Alias MIA1:
        Identifier character set is DEC_KANJI
        Default character set is DEC_KANJI
        National character set is KANJI

例2: デフォルト接続および他の2つの接続の作成

次の例では、personnel_northwest、personnel_northeastおよびpersonnel_southeastの3つのデータベースにアタッチします。(personnel_northwestに対して別名を指定しないことにより、デフォルトの別名が割り当てられます。)EAST_COASTを含む、いくつかの接続が確立されます。EAST_COASTには、personnel_northeastとpersonnel_southeastの両方が含まれます。

SHOW DATABASE文を使用してデータベースに対する変更を表示します。


SQL> --
SQL> -- Attach to the personnel_northwest and personnel_northeast databases.
SQL> -- Personnel_northwest has the default alias, so personnel_northeast
SQL> -- requires an alias.
SQL> -- All of the attached databases comprise the default connection.
SQL> --
SQL> ATTACH 'FILENAME personnel_northwest';
SQL> ATTACH 'ALIAS NORTHEAST FILENAME personnel_northeast';
SQL> --
SQL> -- Add the personnel_southeast database.
SQL> --
SQL> ATTACH 'ALIAS SOUTHEAST FILENAME personnel_southeast';
SQL> --
SQL> -- Connect to personnel_southeast.  CONNECT does an
SQL> -- implicit SET CONNECT to the newly created connection.
SQL> --
SQL> CONNECT TO 'ALIAS SOUTHEAST FILENAME personnel_southeast'
cont>     AS 'SOUTHEAST_CONNECTION';
SQL> --
SQL> -- Connect to both personnel_southeast and personnel_northeast as
SQL> -- EAST_COAST connection. SQL replaces the current connection to
SQL> -- the personnel_southeast database with the EAST_COAST connection
SQL> -- when you issue the CONNECT statement. You now have two different
SQL> -- connections that include personnel_southeast.
SQL> --
SQL> CONNECT TO 'ALIAS NORTHEAST FILENAME personnel_northeast,
cont>     ALIAS SOUTHEAST FILENAME personnel_southeast'
cont>     AS 'EAST_COAST';
SQL> --
SQL> -- The DEFAULT connection still includes all of the attached databases.
SQL> --
SQL> SET CONNECT DEFAULT;
SQL> --
SQL> -- DISCONNECT releases the connection name EAST_COAST, but
SQL> -- does not detach from the EAST_COAST databases because
SQL> -- they are also part of the default connection.
SQL> --
SQL> DISCONNECT 'EAST_COAST';
SQL> --
SQL> SET CONNECT 'EAST_COAST';
%SQL-F-NOSUCHCON, There is not an active connection by that name

SQL> -- SQL> -- If you disconnect from the default connection, and have no other SQL> -- current connections, you are longer be attached to any databases. SQL> -- SQL> DISCONNECT DEFAULT; SQL> SHOW DATABASES; %SQL-F-ERRATTDEF, Could not use database file specified by SQL$DATABASE -RDB-E-BAD_DB_FORMAT, SQL$DATABASE does not reference a database known to Rdb -RMS-E-FNF, file not found


CREATE文

データベース・オブジェクトが作成されます。

使用方法

次の注意事項は、CREATE DATABASEを除くすべてのCREATE文に適用されます。


CREATE CACHE句

注意

CREATE CACHEは独立した文として発行できません。これは、CREATE DATABASE文またはIMPORT文の一部としてのみ使用できる句です。

また、行キャッシュはALTER DATABASE文のADD CACHE句を使用して作成できます。

頻繁に参照される行が、関連付けられたページがディスクに戻された場合もメモリー内に保持されるように、行キャッシュを作成します。これにより、最近参照された行のみがキャッシュされるため、バッファ全体をキャッシュするよりも、メモリー使用率が節約されます。

行キャッシュ領域の詳細は、「ALTER DATABASE文」および「CREATE SEQUENCE文」を参照してください。


環境

CREATE CACHE句は、CREATE DATABASE文またはIMPORT文でのみ使用できます。ADD CACHE句は、ALTER DATABASE文でのみ使用できます。

形式







引数

ALLOCATION IS n BLOCK

ALLOCATION IS n BLOCKS

キャッシュされた行が書き込まれる、行キャッシュ・ファイル(.rdc)の初期割当てを指定します。

ALLOCATION句が指定されない場合、ブロック内のデフォルト割当ては、このキャッシュのCACHE SIZEの約40%です。

行キャッシュがデータベースのチェックポイントに対して定義されている場合、この句は無視されます。

CACHE row-cache-name

行キャッシュを作成します。

CACHE SIZE IS n ROW

CACHE SIZE IS n ROWS

行キャッシュに割り当てられる行数を指定します。行キャッシュが満杯になると、より最近参照された行が行キャッシュに保持され、そうでない行は破棄されます。行キャッシュの割当てを調節して、メモリー内に重要な行を保持できます。指定しない場合、デフォルトは1000行です。

CHECKPOINT ALL ROWS TO BACKING FILE

CHECKPOINT UPDATED ROWS TO BACKING FILE

CHECKPOINT UPDATED ROWS TO DATABASE

行キャッシュのチェックポイント操作用のソース・レコードおよびターゲットを指定します。ALL ROWSが指定された場合、各チェックポイント操作中に書き込まれるレコードは行キャッシュの変更済および未変更の両方の行です。UPDATED ROWSが指定された場合、行キャッシュの変更済の行に対してのみ、毎回チェックポイントが実行されます。

チェックポイント操作のターゲットがBACKING FILEである場合、行キャッシュ・サーバー(RCS)・プロセスによって行キャッシュ・エントリがバッキング(.rdc)・ファイルに書き込まれます。バッキング・ファイルの作成には、行キャッシュLOCATION句、ALLOCATION句およびEXTENT句が使用されます。ノード障害からのリカバリ時に、データベース・リカバリ・プロセスにより行キャッシュをバッキング・ファイルにある行からメモリー内に再移入できます。

ターゲットがDATABASEである場合は、更新済の行(UPDATED ROWSのみが許可される)がデータベースに書き込まれます。行キャッシュLOCATION句、ALLOCATION句およびEXTENT句は無視されます。ノード障害からのリカバリ時に、データベース・リカバリ・プロセスでは行キャッシュのコンテンツにデータが存在しません。このため、行キャッシュをメモリー内に再移入できません。

データベースレベルのCHECKPOINT句は、このCHECKPOINT句によってオーバーライドされます。

EXTENT IS n BLOCK

EXTENT IS n BLOCKS

行キャッシュ・ファイル(.rdc)のファイル・エクステント・サイズを指定します。

EXTENT句が指定されない場合、ブロックのデフォルト数は、このキャッシュのCACHE SIZE * 127です。

行キャッシュがデータベースのチェックポイントに対して定義されている場合、この句は無視されます。

LOCATION IS directory-spec

行キャッシュの情報が書き込まれるディレクトリの名前を指定します。ファイル名(row-cache-name.rdc)は、データベース・システムによって、チェックポイント時間に行キャッシュごとに自動生成されます。デバイス名およびディレクトリ名のみを、一重引用符で囲んで指定します。デフォルトの場所は、データベースのルート・ファイル用ディレクトリです。これらの.rdcファイルは、永続データベース・ファイルです。

データベース・レベルで以前に指定した場所は、このLOCATION句によってオーバーライドされます。

行キャッシュがデータベースのチェックポイントに対して定義されている場合、この句は無視されます。

NO LOCATION

行キャッシュに対してLOCATION IS句で以前に指定した場所が削除されます。NO LOCATIONを指定した場合、行キャッシュの場所はデータベース・ルート・ファイルのディレクトリになります。

行キャッシュがデータベースのチェックポイントに対して定義されている場合、この句は無視されます。

NUMBER OF RESERVED ROWS IS n

各ユーザーがキャッシュへの挿入用に予約できるキャッシュ行の最大数を指定します。プロセスにより、行をキャッシュに挿入するときに使用されるエントリが、キャッシュ内に予約または割り当てられます。効率を高めるため、複数のエントリが一度に予約されます。ユーザーが予約したリストがすべて使用されると、Oracle Rdbにより別のグループのエントリの予約が試行されます。デフォルトは20行です。

この値は、行キャッシュ内の使用可能なスロットの検索にも使用されます。初期パスで行キャッシュ全体が検索されるわけではありません。この値により、空きスロットを検索する行の最大数が指定されます。少なくとも1つの空きスロットが検出されると、挿入操作が実行されます。この初期検索で空きスロットが検出されない場合、空きスロットが見つかるまでOracle Rdbによりキャッシュの検索が続行されます。

NUMBER OF SWEEP ROWS IS n

スイープ操作中に、行キャッシュ・サーバー(RCS)・プロセスにより行キャッシュから再度データベースに書き戻される変更済の行の数を指定します。RCSは、変更済データでキャッシュが満杯であると通知を受けると、後続のトランザクションで行をキャッシュに挿入できるようにスイープを開始し、キャッシュ内に使用可能なスペースを作成します。スイープ行の数を、最初にキャッシュ内の合計行数の約5%に指定することをお薦めします。その後パフォーマンスを監視して、スイープ行の数を必要に応じて調整します。使用可能な値の範囲は、2〜524288である必要があります。指定しない場合、デフォルトは3000行です。

ROW LENGTH IS n BYTES

行キャッシュに割り当てられる各行の長さを指定します。行が行キャッシュ領域に対して大きすぎる場合、それらの行はキャッシュされません。ROW LENGTHは4バイトの次の倍数に丸められた、位置合せ済のロングワードです。