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

戻る
戻る
 
次へ
次へ
 

例9: レコードの水平パーティション化と垂直パーティション化の両方を定義する記憶域マップの表示


SQL> SHOW STORAGE MAP  EMPLOYEES_1_MAP2
     EMPLOYEES_1_MAP2
 For Table:             EMP2
 Partitioning is:       UPDATABLE
 Store clause:          STORE COLUMNS (EMPLOYEE_ID, LAST_NAME, FIRST_NAME,
                        MIDDLE_INITIAL, STATUS_CODE)
            USING (EMPLOYEE_ID)
               IN ACTIVE_AREA_A WITH LIMIT OF ('00399')
               IN ACTIVE_AREA_B WITH LIMIT OF ('00699')
               OTHERWISE IN ACTIVE_AREA_C
         STORE COLUMNS (ADDRESS_DATA_1, ADDRESS_DATA_2, CITY,
                        STATE, POSTAL_CODE)
            USING (EMPLOYEE_ID)
               IN INACTIVE_AREA_A WITH LIMIT OF ('00399')
               IN INACTIVE_AREA_B WITH LIMIT OF ('00699')
               OTHERWISE IN INACTIVE_AREA_C
         STORE IN OTHER_AREA
 Compression is:        ENABLED
 Partition 2:           Compression is Enabled
 Partition 3:           Compression is Enabled

例10: 順序の表示


SQL> SHOW SEQUENCE EMPIDS
     EMPIDS
 Sequence Id: 3
 Initial Value: 1
 Minimum Value: 1
 Maximum Value: 9223372036854775787
 Next Sequence Value: 1
 Increment by: 1
 Cache Size: 20
 Order
 No Cycle
 No Randomize
 Comment:       Sequence for employee IDs.

例11: ロールの表示


SQL> SHOW ROLE SECRETARY
     SECRETARY
 Identified Externally
 Comment:       Role for the secretarial staff

例12: ユーザーの表示


SQL> SHOW USER NSTEWART
     NSTEWART
 Identified Externally
 Account Unlocked
 Comment:       Nicholas Stewart

例13: 1つのプロファイルの詳細の表示


SQL> SHOW PROFILE
Profiles in database with filename SQL$DATABASE
     DECISION_SUPPORT
SQL> SHOW PROFILE DECISION_SUPPORT
     DECISION_SUPPORT
 Comment:       limit transactions used by report writers
     Transaction modes (read only, no read write)
SQL> ALTER PROFILE DECISION_SUPPORT
cont>   default transaction read only;
SQL> SHOW PROFILE DECISION_SUPPORT
     DECISION_SUPPORT
 Comment:       limit transactions used by report writers
     Default transaction read only
     Transaction modes (read only, no read write)
SQL>

例14: 大/小文字が混在する名前のデリミタ付き識別子の使用の表示


SQL> CREATE PROFILE "Decision_Support"
cont> COMMENT IS 'limit transactions used by report writers'
cont> TRANSACTION MODES (NO READ WRITE, READ ONLY);
SQL> SHOW PROFILE
Profiles in database with filename SQL$DATABASE
     Decision_Support
SQL> SHOW PROFILE Decision_Support
 No Users found
SQL> SHOW PROFILE "Decision_Support"
     Decision_Support
 Comment:       limit transactions used by report writers
     Transaction modes (read only, no read write)

例15: シノニムの表示


SQL> SHOW SYNONYMS
Synonyms in database with filename SQL$DATABASE
     C_SAL                           View                 CURRENT_SALARY
     E                               Table synonym        EMPS
     EMPS                            Table                EMPLOYEES
     ID_NUMBER                       Domain               ID_DOM

SQL> SHOW SYNONYMS ID_NUMBER
 ID_NUMBER
 for domain  ID_DOM
 Comment:       support the old name for this domain

SQL> SHOW VIEWS

User tables in database with filename SQL$DATABASE
     CURRENT_INFO                    A view.
     CURRENT_JOB                     A view.
     CURRENT_SALARY                  A view.
     C_SAL                           A synonym for view CURRENT_SALARY

例16: シノニムを使用したオブジェクトの識別

この例では、順序および順序のシノニムを作成し、このシノニムでSHOW SEQUENCEコマンドを使用しています。


SQL> create sequence department_id_sequence;
SQL> create synonym dept_id_s for department_id_sequence;
SQL> show sequence
Sequences in database with filename personnel
     DEPARTMENT_ID_SEQUENCE
     DEPT_ID_S                       A synonym for sequence DEPARTMENT_ID_SEQUENCE
SQL> show sequence DEPT_ID_S
     DEPT_ID_S                       A synonym for sequence DEPARTMENT_ID_SEQUENCE
 Sequence Id: 1
 Initial Value: 1
 Minimum Value: 1
 Maximum Value: 9223372036854775787
 Next Sequence Value: 1
 Increment by: 1
Next Sequence Value: 1
 Increment by: 1
 Cache Size: 20
 No Order
 No Cycle
 No Randomize
 Wait
SQL>


単一文

モジュール・プロシージャまたは埋込みホスト言語プログラムに単一SQL文を組み込みます。この文では、単一の実行SQL文を組み込むことができます。単一文が組み込まれたモジュール・プロシージャまたは埋込みプロシージャは、単一文プロシージャと呼ばれます。

単一文で使用できるすべてのSQL文のリストは、表1-1を参照してください。


環境

単一文は、SQLモジュール・ファイルのプロシージャ、または先頭にキーワードEXEC SQLが付いた埋込みホスト言語プログラムのいずれかで有効です。


形式



引数

SQL文

単一の実行SQL文を指定します。

実行SQL文は、モジュールのコンパイル時に処理されますが、プログラムが実行されるまでは実行されません。複合文が埋め込まれているプロシージャがホスト言語モジュールでコールされると、単一文が実行されます。(非実行SQL文は、SQLモジュールのコンパイル時に完全に処理されるが実行時には実行されない文です。)実行SQL文と非実行SQL文の詳細は、第1.4節を参照してください。

SQL文には、パラメータを参照する場合は常に、プロシージャの仮パラメータに指定されている名前を使用する必要があります。


使用方法


例1: 対話型SQLを使用する単一文


SQL> ALTER DATABASE FILENAME mf_personnel
cont> JOURNAL IS DISABLED;


SIGNAL制御文

送信されたSQLSTATEステータス・パラメータをアプリケーションまたはSQLインタフェースに戻し、現行ルーチンおよびすべてのコール側ルーチンを終了します。

環境

SIGNAL文は、次の環境の複合文で使用できます。


形式



引数

signal-arg

値式を指定します。指定した値は、CHARACTER(80) CHARACTER SET UNSPECIFIED文字列に変換され、セカンダリ・メッセージとしてクライアント・アプリケーションに返されます。値式が80文字を超える長さの文字列に変換される場合、この式は切り捨てられます。

sql_get_error_textルーチンを使用して、アプリケーションでsignal-argテキストを抽出できます。

string-literal

SQLSTATE値を表す引用符付き文字列リテラルです。

value-expr

SQLSTATEステータス・パラメータとして使用される文字値式を想定します。指定した値式は、CHAR(5)値に変換され、SIGNALに渡されます。

値式の詳細は、第2.6節を参照してください。SQLSTATEの詳細は、付録Cを参照してください。


使用方法


例1: SIGNAL文およびRETURN文、複数行コメント、およびストアド・ファンクションの使用

この例では、表NEXT_KEY_TABLEを使用して、キー名およびその現行値のリストを保持しています。この例では、名前EMPLOYEE_IDを持つ単一キーのみが作成されています。ファンクションがコールされるたびにNEXT_KEY_TABLEから値がフェッチされ、次の値が返されます。指定したキーが見つからない場合、エラーが返されます(SQLSTATE 22023は「invalid parameter value」として定義されています)。


SQL> CREATE DOMAIN key_name
cont>   CHAR(31)
cont>   CHECK (VALUE IS NOT NULL)
cont>   NOT DEFERRABLE;
SQL> --
SQL> CREATE TABLE next_key_table (
cont>   next_key_val INTEGER NOT NULL,
cont>   next_key_name key_name UNIQUE);
SQL> --
SQL> INSERT INTO next_key_table (next_key_name, next_key_val)
cont>   VALUES ('EMPLOYEE_ID', 0);
1 row inserted
SQL> --
SQL> CREATE MODULE tools
cont>   LANGUAGE SQL
cont>   FUNCTION next_key (IN :key_name key_name)
cont>      RETURNS INTEGER
cont>      COMMENT IS 'This routine fetches the next value of the'/
cont>                 'specified entry in the sequence table.  The'/
cont>                 'passed name is converted to uppercase before'/
cont>                 'retrieval (see the DEFAULT clause for compound'/
cont>                 'statements).  The UPDATE ... RETURNING statement'/
cont>                 'is used to fetch the new value after the update.'/
cont>                 'If no entry exists, then an error is returned.';
cont>      BEGIN
cont>        DECLARE :rc, :new_val INTEGER DEFAULT 0;
cont>        DECLARE :key_name_upper key_name DEFAULT UPPER(:key_name);
cont>        DECLARE :invalid_parameter CONSTANT CHAR(5) = '22023';
cont> --
cont>        UPDATE next_key_table
cont>        SET next_key_val = next_key_val + 1
cont>        WHERE next_key_name = :key_name_upper
cont>        RETURNING next_key_val
cont>        INTO :new_val;
cont> --
cont>        GET DIAGNOSTICS :rc = ROW_COUNT;
cont>        TRACE 'NEXT_KEY is ', COALESCE(:new_val, 'NULL'), ', RC is ', :rc;
cont> --
cont>        IF :rc = 0 THEN
cont>            TRACE 'No entry exists for KEY_NAME: ', :key_name_upper;
cont>            SIGNAL :invalid_parameter;
cont>         ELSE
cont>            TRACE 'Returning new value for ', :key_name_upper, :new_val;
cont>            RETURN :new_val;
cont>        END IF;
cont> --
cont>      END;
cont> END MODULE;
SQL> --
SQL> CREATE TABLE employee (
cont>   employee_id         INTEGER,
cont>   last_name           CHAR(20),
cont>   birthday            DATE);
SQL> --
SQL> -- Turn on the TRACE flag so we can see the function working.
SQL> --
SQL> SET FLAGS 'TRACE';
SQL> --
SQL> INSERT INTO employee (employee_id, last_name, birthday)
cont>   VALUES (next_key('EMPLOYEE_ID'), 'Smith', DATE'1970-1-1');
~Xt: NEXT_KEY is 1          , RC is 1
~Xt: Returning new value for EMPLOYEE_ID                    1
1 row inserted
SQL> --
SQL> INSERT INTO employee (employee_id, last_name, birthday)
cont>   VALUES (next_key('EMPLOYEE_ID'), 'Lee', DATE'1971-1-1');
~Xt: NEXT_KEY is 2          , RC is 1
~Xt: Returning new value for EMPLOYEE_ID                    2
1 row inserted
SQL> --
SQL> INSERT INTO employee (employee_id, last_name, birthday)
cont>   VALUES (next_key('EMPLOYEE_ID'), 'Zonder', DATE'1972-1-1');
~Xt: NEXT_KEY is 3          , RC is 1
~Xt: Returning new value for EMPLOYEE_ID                    3
1 row inserted
SQL> --
SQL> SELECT * FROM employee ORDER BY EMPLOYEE_ID;
 EMPLOYEE_ID   LAST_NAME              BIRTHDAY
           1   Smith                  1970-01-01
           2   Lee                    1971-01-01
           3   Zonder                 1972-01-01
3 rows selected
SQL> --
SQL> -- Show the error if the unknown key_name is passed.
SQL> --
SQL> INSERT INTO employee (employee_id, last_name, birthday)
cont>   VALUES (next_key('EMPLOYEEID'), 'Zonder', DATE'1972-1-1');
~Xt: NEXT_KEY is 0          , RC is 0
~Xt: No entry exists for KEY_NAME: EMPLOYEEID
%RDB-E-SIGNAL_SQLSTATE, routine "NEXT_KEY" signaled SQLSTATE "22023"

例2: セカンダリ・エラーの指定


SQL> BEGIN
SQL> SIGNAL SQLSTATE 'RR000' (' Compound Statement Failed');
cont> END;
%RDB-E-SIGNAL_SQLSTATE, routine "(unnamed)" signaled SQLSTATE "RR000"
-RDB-I-TEXT,  Compound Statement Failed


START TRANSACTION文

指定した属性を使用してトランザクションを開始します。DEFAULTを指定すると、属性はユーザーのプロファイルから導出されます。

環境

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


形式





引数

DEFAULT

DEFAULTキーワードを使用すると、ユーザー固有のデフォルト・トランザクションが開始されます。このデフォルトは、現在のセッション・ユーザーのプロファイルに定義されています。何も指定しない場合、READ ONLYトランザクションが開始されます。


SQL> CREATE PROFILE READ_USERS
cont>   DEFAULT TRANSACTION READ ONLY WAIT 10;
SQL> ALTER USER JONES PROFILE READ_USERS;

JONESによって実行されるSTART DEFAULT TRANSACTION文により、READ ONLY WAIT 10トランザクションが開始されます。

プロファイルの詳細は、「ALTER PROFILE文」および「CREATE PROFILE文」を参照してください。

ISOLATION LEVEL READ COMMITTED

ISOLATION LEVEL REPEATABLE READ

ISOLATION LEVEL SERIALIZABLE

SQLトランザクションでのデータベース操作が、同時実行トランザクションでのデータベース操作による影響を受ける程度を定義します。これにより、データベースでデータの整合性が保護される程度が決まります。

Oracle Rdbでは、分離レベルとしてREAD COMMITTED、REPEATABLE READおよびSERIALIZABLEをサポートしています。Oracle RdbデータベースでSQLを使用する場合、デフォルトでは、トランザクションは分離レベルSERIALIZABLEで実行されます。分離レベルが高くなるほど、トランザクションが現在実行中の他のトランザクションから分離される程度が高くなります。分離レベルにより、同時トランザクションの実行時に発生が許容される現象のタイプが決まります。トランザクションのSQL分離レベルは、次の2つの現象によって定義されます。

許可される現象は、分離レベルごとに異なります。表6-22は、START TRANSACTION文で明示的に指定可能な分離レベルで許可される現象を示しています。

表6-22 各分離レベルで許可される現象
分離レベル ノンリピータブル・リード
の許可
ファントム
の許可
READ COMMITTED
REPEATABLE READ ×
SERIALIZABLE × ×

常に分離レベルSERIALIZABLEで実行される読取り専用トランザクションの場合、スナップショットを有効にすると、COMMIT文を発行する前の別のユーザーによる変更が表示されないことがデータベース・システムによって保証されます。

トランザクションにおける分離レベルの指定の詳細は、『Oracle Rdb7 Guide to SQL Programming』を参照してください。

READ ONLY

読取り専用トランザクションの開始時にデータベースのスナップショットを取得します。使用している表の行は他のユーザーによる更新が可能ですが、トランザクションで取得される行は、トランザクションの開始時に存在していた行です。読取り専用トランザクションで、行を更新、挿入または削除したり、データ定義文を実行できません。ただし、ローカル一時表の宣言や、作成または宣言された一時表でのデータの変更は例外です。読取り専用トランザクションは、暗黙的に分離レベルとしてシリアライズ可能になります。

読取り専用トランザクションではデータベースのスナップショット(.snp)・バージョンが使用されるため、トランザクション中に他のユーザーによって行われる変更やコミットは表示されません。読取り専用トランザクションを使用すると、行ロックのオーバーヘッドを発生させずにデータの読取りが可能です。(RESERVING句で指定する表のスナップショットの保持によるオーバーヘッドは発生しますが、このオーバーヘッドは同等の読取り/書込みトランザクションの場合よりも小さくなります。)

読取り専用トランザクションは本質的に制限されているため、いくつかの制限が課されます。これらの制限は、「使用方法」を参照してください。

READ WRITE

データの取得および更新における整合性を確保するためにSQLのロック・メカニズムを使用するように指定します。デフォルト・トランザクションは、読取り/書込みです。読取り/書込みトランザクション・モードを使用するのは、次の操作が必要な場合です。

読取り/書込みトランザクションでの行の読取り時に、他のユーザーはこの行を更新できません。状況によっては、明示的に読み取っていない行がロックされる場合があります。


使用方法


例1: 複数文プロシージャでの、または単一文としてのデフォルト・トランザクションの開始


SQL> START DEFAULT TRANSACTION;
SQL>
SQL> BEGIN
cont> COMMIT;
cont> START DEFAULT TRANSACTION;
cont> END;
SQL>
SQL> ROLLBACK;

例2: START TRANSACTION文の複数のバリエーションの開始


SQL> START TRANSACTION READ WRITE,
cont>   ISOLATION LEVEL READ COMMITTED;
SQL> COMMIT;
SQL>
SQL> -- Defaults to serializable
SQL> START TRANSACTION READ WRITE;
SQL> COMMIT;
SQL>
SQL> -- Defaults to read write
SQL> START TRANSACTION ISOLATION LEVEL READ COMMITTED;
SQL> ROLLBACK;
SQL>
SQL> -- Defaults to read write serializable
SQL> START TRANSACTION;
SQL>
SQL> BEGIN
cont> COMMIT;
cont> START TRANSACTION
cont>     ISOLATION LEVEL READ COMMITTED,
cont>     READ WRITE;
cont> END;
SQL> COMMIT;