ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

    SQL> SET FLAGS 'EXECUTION(1000)';
    SQL> SHOW FLAGS

    Alias RDB$DBHANDLE:
    Flags currently set for Oracle Rdb:
       PREFIX,EXECUTION(1000)

キーワードと丸カッコで囲んだ数値の間には空白を使用できません。

- 次のアクションが原因でルーチン、問合せアウトラインおよびトリガーが無効になった場合、VALIDATE_ROUTINEを使用します。

  - CASCADEオプションを使用して表が削除された場合、この表を参照するプロシージャまたはファンクションは無効であるとマークされます。

  - CASCADEオプションまたはRESTRICTオプションを使用して表が削除された場合、この表を参照する問合せアウトラインは無効であるとマークされます。

  - CASCADEオプションを使用してモジュールが削除された場合、このモジュールを参照するプロシージャ、ファンクションまたは問合せアウトラインは無効であるとマークされます。問合せアウトラインは、モジュール・レベルで宣言された一時表を使用する場合、モジュールを参照します。

  - CASCADEオプションを使用してルーチンが削除された場合、このルーチンを参照するトリガーまたはルーチンは無効であるとマークされます。

  - 索引が削除されたか、変更されてMAINTENANCE IS DISABLEDが設定された場合、この索引を参照する問合せアウトラインは無効であるとマークされます。

- DATABASE_PARAMETERSキーワードによって出力が生成されるのは、SET FLAGS文の実行の前に行われる、データベースへのATTACH中のみです。
  このため、このオプションが有効なのは、RDMS$SET_FLAGS論理名とともに使用する場合のみです。

      $ define RDMS$SET_FLAGS "database_parameters"
      $ sql$
      SQL> Attach 'File db$:scratch';
       ATTACH #1, Database DISK:[DOCS.V71]SCRATCH.RDB;1
      ~P Database Parameter Buffer (version=2, len=79)
      0000 (00000) RDB$K_DPB_VERSION2
      0001 (00001) RDB$K_FACILITY_ALL
      0002 (00002) RDB$K_DPB2_IMAGE_NAME "NODE::DISK:[DIR]SQL$70.EXE;1"
      0040 (00064) RDB$K_FACILITY_ALL
      0041 (00065) RDB$K_DPB2_DBKEY_SCOPE (Transaction)
      0045 (00069) RDB$K_FACILITY_ALL
      0046 (00070) RDB$K_DPB2_REQUEST_SCOPE (Attach)
      004A (00074) RDB$K_FACILITY_RDB_VMS
      004B (00075) RDB$K_DPB2_CDD_MAINTAINED (No)
       RDMS$BIND_WORK_FILE = "DISK:[DIR]RDMSTTBL$UEOU3LQ0RV2.TMP;" (Visible = 0)
      SQL> Exit
       DETACH #1

- INDEX_COLUMN_GROUPキーワードを使用すると、アプリケーションでは、索引に指定されている索引列グループ情報をより効率的に使用できるようになります。このキーワードを使用しないと、選択条件に複数セグメント索引の先頭のセグメントの一部のみが指定されている場合、Oracle Rdbオプティマイザにより、選択されたソリューションについてより高いカーディナリティが推定される可能性があります。この可能性があるのは、たとえば、2セグメントの索引の最初のセグメントに対して等価を指定する場合です。
  このようなわずかな過大評価は、比較的小さい表では重大な問題ではありません。しかし、選択操作にソート（特にOpenVMS SORT機能）が含まれるときに、推定されたソリューションのカーディナリティに基づいてソート・バッファが事前に割り当てられる場合、重大な問題となります。

- MODE(n)キーワードまたはNOMODEキーワードと同義のデバッグ・フラグは存在しません。かわりに、RDMS$BIND_OUTLINE_MODE論理名を使用できます。

- RMU Loadコマンドを使用して多くの行をロードする場合、SEQ_CACHEキーワードを使用できます。大規模なバッチですべての順序値が割り当てられる場合、このコマンドが最も効率的です。次に例を示します。

      $ DEFINE RDMS$SET_FLAGS   "SEQ_CACHE(10000)"
      $ RMU/LOAD/COMMIT_EVERY=50000 DATABASE TABLE FILE

  この例では、SEQUENCE.NEXTVALが実行されるようにAUTOMATIC列が定義されているとみなされます。

- 制約用として作成されているすべての索引のタイプは、SORTEDです。データベースのSYSTEM INDEXのデフォルトがSORTED RANKEDである場合、この同じデフォルトがAUTO_INDEXオプションによって使用されます。

- AUTO_INDEXとともにINDEX_STATSオプションを使用して、作成される索引の説明を表示します。
  適切な索引がすでに存在する場合、新規索引の作成よりもその索引の使用が優先されます。
  すべての索引はDEFAULT記憶域に作成されます。作成時にこれらの索引に記憶域マップを追加する機能はありません。
  索引には、作成の元となる制約と同じ名前が付けられます。この制約が削除されても索引は残るため、手動で削除する必要があります。この索引は複数の制約によって使用される場合があります。

- ユーザーのSELECT文、UPDATE文およびDELETE文にOPTIMIZE WITH SELECTIVITY句が明示的または暗黙的に指定されていない場合、SELECTIVITYフラグはこれらのフラグに影響します。

- TRACE文は任意のストアド・ルーチンから使用できます。ただし、ストアド・ルーチンは（ネストされているかどうかとは関係なく）セッションごとに1回のみロードされるため、ルーチンを初めて起動する前にTRACEフラグを有効にする必要があります。

- 対話型SQLまたは動的SQLを使用する場合、WATCH_CALLとWATCH_OPENの両方により、SQLランタイム・システムによってRdbシステム表に対して実行される問合せのトレース行が生成されます。このような情報のトレースを無効にするメカニズムは存在しません。

- WATCH_CALLフラグおよびWATCH_OPENフラグを使用すると、この情報を出力するように問合せとルーチンが変更されます。これにより、この情報の収集時にアプリケーションのCPUオーバーヘッドが増加する可能性があります。これらのフラグが無効であっても、通常はDISCONNECT時に、モジュールまたは問合せが解放されるまでは除去されないオーバーヘッドが多少存在します。

- サード・パーティのソフトウェアを使用する場合など、多くの場合、問合せにはアウトライン名を指定できません。この場合、Oracle Rdbでは、一致する識別子を持つアウトラインを特定しようとします。オプティマイザにより識別子は問合せ構造体に依存するハッシュ値として生成されるため、問合せにおける小さな変更（リテラル値の差異など）により、生成された識別子が変更されます。
  ALTERNATE_OUTLINE_ID(LITERALS)キーワード（省略形はALT(LIT)）を使用すると、代替アウトライン識別子を制御できます。このキーワードを設定するには、SET FLAGS文またはRDMS$SET_FLAGS論理名を使用します。このキーワードを設定すると、識別子の作成時にオプティマイザによりリテラル値が破棄されます。より汎用的なこのアウトラインを格納することにより、リテラル値のみが異なる同様の問合せで使用できるようになります。次に例を示します。

      SQL> set flags 'alt(lit)';
      SQL> create outline o1 from (select * from employees where employee_id = '1');
      SQL> set flags 'strat';
      SQL> select * from employees where employee_id = '1';
      ~S: Outline "O1" used
      Get     Retrieval by index of relation EMPLOYEES
        Index name  EMP_EMPLOYEE_ID [1:1]      Direct lookup
      0 rows selected
      SQL> select * from employees where employee_id = 'AAAAAA';
      ~S: Outline "O1" used
      Conjunct        Get     Retrieval by index of relation EMPLOYEES
        Index name  EMP_EMPLOYEE_ID [1:1]      Direct lookup
      0 rows selected

  ALTERNATE_OUTLINE_IDフラグが設定されていない場合、アウトラインは完全な問合せを使用して作成されます。

  ## 例

  > 例1: データベース・システムのデバッグ・フラグの有効化および無効化

  >     SQL> ATTACH 'FILENAME MF_PERSONNEL';
  >     SQL> SHOW FLAGS

  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        PREFIX
  >     SQL>
  >     SQL> SET FLAGS 'TRACE';
  >     SQL> SHOW FLAGS

  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        PREFIX,TRACE
  >     SQL>
  >     SQL> SET FLAGS 'STRATEGY';
  >     SQL> SHOW FLAGS

  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        STRATEGY,PREFIX,TRACE
  >     SQL>
  >     SQL> SET FLAGS 'NOTRACE';
  >     SQL> SHOW FLAGS

  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        STRATEGY,PREFIX
  >     SQL>
  >     SQL> SET NOFLAGS;
  >     SQL> SHOW FLAGS

  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        PREFIX
  >     SQL>

  > 例2: PREFIXキーワードの使用

  >     SQL> ATTACH 'FILENAME mf_personnel';
  >     SQL> --
  >     SQL> -- Show that the PREFIX keyword is enabled by default
  >     SQL> --
  >     SQL> SHOW FLAGS

  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        PREFIX
  >     SQL> --
  >     SQL> -- Enable TRACE
  >     SQL> --
  >     SQL> SET FLAGS 'TRACE';
  >     SQL> SHOW FLAGS

  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        PREFIX,TRACE
  >     SQL> --
  >     SQL> -- Show that the prefix is displayed
  >     SQL> --
  >     SQL> BEGIN
  >     cont>  TRACE 'AAA';
  >     cont> END;
  >     ~Xt: AAA
  >     SQL> --
  >     SQL> -- Turn off the prefix
  >     SQL> --
  >     SQL> SET FLAGS 'NOPREFIX';
  >     SQL> SHOW FLAGS

  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        TRACE
  >     SQL> --
  >     SQL> -- Show that the prefix is no longer displayed
  >     SQL> --
  >     SQL> BEGIN
  >     cont>  TRACE 'AAA';
  >     cont> END;
  >     AAA

  > 例3: 対話型SQLでのホスト変数の使用

  > この例も、複数のオプションとともにリテラル文字列を使用してフラグを有効化または無効化する方法を示しています。

  >     SQL> SHOW FLAGS
  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        PREFIX
  >     SQL> -- declare a host variable to be used with SET FLAGS
  >     SQL> declare :hv char(40);
  >     SQL> -- assign a value to the variable
  >     SQL> begin
  >     cont> set :hv = 'strategy, outline';
  >     cont> end;
  >     SQL> -- use the host variable to enable or disable flags
  >     SQL> set flags :hv;
  >     SQL> show flags

  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        STRATEGY,PREFIX,OUTLINE
  >     SQL> -- use a string literal directly with the SET FLAGS statement
  >     SQL> set flags 'noprefix,execution(10)';
  >     SQL> show flags

  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        STRATEGY,OUTLINE,EXECUTION(10)

  > 例4: MODE(n)フラグの使用

  >     SQL> SET FLAGS 'MODE(10), OUTLINE';
  >     SQL> SHOW FLAGS
  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        PREFIX,OUTLINE,MODE(10)
  >     SQL> SELECT COUNT(*) FROM EMPLOYEES;
  >     -- Rdb Generated Outline : 30-MAY-1997 16:35
  >     create outline QO_B3F54F772CC05435_0000000A
  >     id 'B3F54F772CC054350B2B454D95537995'
  >     mode 10
  >     as (
  >       query (
  >     -- For loop
  >         subquery (
  >           subquery (
  >             EMPLOYEES 0     access path index       EMP_EMPLOYEE_ID
  >             )
  >           )
  >         )
  >       )
  >     compliance optional     ;
  >              100
  >     1 row selected

  > 例5: WARN_INVALIDデバッグ・フラグの使用

  >     SQL> SET FLAGS 'WARN_INVALID';
  >     SQL> SHOW FLAGS;
  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        PREFIX,WARN_INVALID
  >     SQL> -- warning because of dependencies
  >     SQL> DROP TABLE T1 CASCADE;
  >     ~Xw: Routine "P3" marked invalid
  >     ~Xw: Routine "P2" marked invalid
  >     ~Xw: Routine "P1" marked invalid
  >     SQL>
  >     SQL> -- Create an outline that references an INDEX.
  >     SQL> CREATE TABLE T1 (A INTEGER, B INTEGER);
  >     SQL> CREATE INDEX I1 ON T1 (A);
  >     SQL> CREATE OUTLINE QO1
  >     cont> ID '19412AB61A7FE1FA6053F43F8F01EE6D'
  >     cont> MODE 0
  >     cont> AS (
  >     cont>   QUERY (
  >     cont>     SUBQUERY (
  >     cont>       T1 0    ACCESS PATH INDEX       I1
  >     cont>       )
  >     cont>     )
  >     cont>   )
  >     cont> COMPLIANCE OPTIONAL;
  >     SQL>
  >     SQL> -- Warning because of disabled index
  >     SQL> ALTER INDEX I1
  >     cont>     MAINTENANCE IS DISABLED;
  >     ~Xw: Outline "QO1" marked invalid (index "I1" disabled)
  >     SQL> SHOW OUTLINE QO1;
  >          QO1
  >         Object has been marked INVALID
  >      Source:
  >     CREATE OUTLINE QO1
  >     ID '19412AB61A7FE1FA6053F43F8F01EE6D'
  >     MODE 0
  >     AS (
  >       QUERY (
  >         SUBQUERY (
  >           T1 0    ACCESS PATH INDEX       I1
  >           )
  >         )
  >       )
  >     COMPLIANCE OPTIONAL;

  > 例6: INTERNALキーワードの使用によるトリガー・アクションの表示

  >     SQL> -- The following code shows the strategy used by the trigger
  >     SQL> -- actions on the AFTER DELETE trigger on EMPLOYEES
  >     SQL> SET FLAGS 'STRATEGY, INTERNALS, REQUEST_NAMES';
  >     SQL> SHOW FLAGS
  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        INTERNALS,STRATEGY,PREFIX,REQUEST_NAMES
  >     SQL> DELETE FROM EMPLOYEES WHERE EMPLOYEE_ID = '00164';
  >     ~S: Trigger name  EMPLOYEE_ID_CASCADE_DELETE
  >     Get     Temporary relation      Retrieval by index of relation DEGREES
  >       Index name  DEG_EMP_ID [1:1]
  >     ~S: Trigger name  EMPLOYEE_ID_CASCADE_DELETE
  >     Get     Temporary relation      Retrieval by index of relation JOB_HISTORY
  >       Index name  JOB_HISTORY_HASH [1:1]
  >     ~S: Trigger name  EMPLOYEE_ID_CASCADE_DELETE
  >     Get     Temporary relation      Retrieval by index of relation SALARY_HISTORY
  >       Index name  SH_EMPLOYEE_ID [1:1]
  >     ~S: Trigger name  EMPLOYEE_ID_CASCADE_DELETE
  >     Conjunct        Get     Retrieval by index of relation DEPARTMENTS
  >       Index name  DEPARTMENTS_INDEX [0:0]
  >     Temporary relation      Get     Retrieval by index of relation EMPLOYEES
  >       Index name  EMPLOYEES_HASH [1:1]       Direct lookup
  >     1 row deleted

  > 例7: INDEX_COLUMN_GROUPキーワードの使用

  >     SQL> -- The table STUDENTS has an index on the two columns
  >     SQL> -- STU_NUM and COURSE_NUM. When the INDEX_COLUMN_GROUP
  >     SQL> -- keyword is not set, the optimizer uses a fixed
  >     SQL> -- proportion of the table cardinality based on the equality
  >     SQL> -- with the STU_NUM column. In this example, 5134 rows are expected,
  >     SQL> -- when in reality, only 9 are returned by the query.
  >     SQL> CREATE INDEX STUDENT_NDX ON STUDENTS (STU_NUM,COURSE_NUM DESC);
  >     SQL> --
  >     SQL> SELECT STU_NUM FROM STUDENTS
  >     cont>  WHERE STU_NUM = 191270771
  >     cont>  ORDER BY OTHER_COLUMN;
  >     Solutions tried 2
  >     Solutions blocks created 1
  >     Created solutions pruned 0
  >     Cost of the chosen solution   4.5644922E+03
  >     Cardinality of chosen solution   5.1342500E+03
  >     ~O: Physical statistics used
  >     Sort
  >     SortId# 7., # Keys 2
  >       Item# 1, Dtype: 2, Order: 0, Off: 0, Len: 1
  >       Item# 2, Dtype: 35, Order: 0, Off: 1, Len: 8
  >       LRL: 32, NoDups:0, Blks:327, EqlKey:0, WkFls: 2
  >     Leaf#01 BgrOnly STUDENTS Card=164296
  >       BgrNdx1 STUDENT_NDX [1:1] Fan=14
  >        191270771
  >        191270771
  >        191270771
  >        191270771
  >        191270771
  >        191270771
  >        191270771
  >        191270771
  >     SORT(9) SortId# 7, --------------------- Version: V5-000
  >       Records Input: 9      Sorted: 9       Output: 0
  >       LogRecLen Input: 32     Intern: 32      Output: 32
  >       Nodes in SoTree: 5234   Init Dispersion Runs: 0
  >       Max Merge Order: 0      Numb.of Merge passes: 0
  >       Work File Alloc: 0
  >       MBC for Input: 0        MBC for Output: 0
  >       MBF for Input: 0        MBF for Output: 0
  >       Big Allocated Chunk: 4606464 busy
  >        191270771
  >     9 rows selected
  >     SQL> --
  >     SQL> -- When you use the SET FLAGS statement to set the
  >     SQL> -- INDEX_COLUMN_GROUP keyword, it activates the optimizer
  >     SQL> -- to consider the index segment columns as a workload column
  >     SQL> -- group, compute the statistics for duplicity factor and null
  >     SQL> -- factor dynamically, and then apply them in estimating the
  >     SQL> -- cardinality of the solution.
  >     SQL> --
  >     SQL> SET FLAGS 'INDEX_COLUMN_GROUP';
  >     SQL> -- The following is the optimizer cost estimate and sort output trace
  >     SQL> -- for the previous query with INDEX_COLUMN_GROUP enabled. The optimizer
  >     SQL> -- now estimates a lower cardinality of about 8 rows.
  >     Solutions tried 2
  >     Solutions blocks created 1
  >     Created solutions pruned 0
  >     Cost of the chosen solution   3.8118614E+01
  >     Cardinality of chosen solution   8.3961573E+00
  >     ~O: Workload and Physical statistics used
  >     Sort
  >     SortId# 2., # Keys 2
  >       Item# 1, Dtype: 2, Order: 0, Off: 0, Len: 1
  >       Item# 2, Dtype: 35, Order: 0, Off: 1, Len: 8
  >       LRL: 32, NoDups:0, Blks:7, EqlKey:0, WkFls: 2
  >     Leaf#01 BgrOnly STUDENTS Card=164296
  >       BgrNdx1 STUDENT_NDX [1:1] Fan=14
  >        191270771
  >        191270771
  >        191270771
  >        191270771
  >        191270771
  >        191270771
  >        191270771
  >        191270771
  >     SORT(2) SortId# 2, --------------------- Version: V5-000
  >       Records Input: 9      Sorted: 9       Output: 0
  >     LogRecLen Input: 32     Intern: 32      Output: 32
  >     Nodes in SoTree: 114    Init Dispersion Runs: 0
  >     Max Merge Order: 0      Numb.of Merge passes: 0
  >     Work File Alloc: 0
  >     MBC for Input: 0        MBC for Output: 0
  >     MBF for Input: 0        MBF for Output: 0
  >     Big Allocated Chunk: 87552 idle
  >        191270771
  >     9 rows selected

  > 例8: AUTO_OVERRIDEキーワードの使用

  >     SQL> -- Suppose that after year 2000 testing was performed on a
  >     SQL> -- production system, the system date and time were not reset
  >     SQL> -- to the correct date.  This was not noticed until
  >     SQL> -- after transactions for a full day had been stored. To
  >     SQL> -- correct this problem, the database administrator overrides
  >     SQL> -- the READ ONLY characteristic of the AUTOMATIC column and
  >     SQL> -- adjusts the date and time.
  >     SQL> SELECT * FROM ACCOUNTS
  >     cont> WHERE LAST_UPDATE > DATE'2001-1-1';
  >            ACCOUNT_NO     LAST_NAME          LAST_UPDATE    CURRENT_BALANCE
  >            NULL           Smith              2001-06-02      100000.000
  >     1 row selected
  >     SQL> -- Attempts to fix the date and time fail because the
  >     SQL> -- column is AUTOMATIC.
  >     SQL> UPDATE ACCOUNTS
  >     cont>     SET LAST_UPDATE = LAST_UPDATE - INTERVAL'1' YEAR
  >     cont>     WHERE LAST_UPDATE > DATE'2000-1-1';
  >     %RDB-E-READ_ONLY_FIELD, attempt to update the read-only field LAST_UPDATE
  >     SQL> --
  >     SQL> SET FLAGS 'AUTO_OVERRIDE';
  >     SQL> SHOW FLAGS
  >     Alias RDB$DBHANDLE:
  >     Flags currently set for Oracle Rdb:
  >        PREFIX,AUTO_OVERRIDE
  >     SQL>--
  >     SQL> -- Fix the date and time.
  >     SQL> UPDATE ACCOUNTS
  >     cont>     SET LAST_UPDATE = LAST_UPDATE - INTERVAL'1' YEAR
  >     cont>     WHERE LAST_UPDATE > DATE'2000-1-1';
  >     1 row updated
  >     SQL>
  >     SQL> SELECT * FROM ACCOUNTS;
  >                ACCOUNT_NO   LAST_NAME              LAST_UPDATE   CURRENT_BALANCE
  >                      NULL   Smith                  1999-06-02         100000.000
  >     1 row selected
  >     SQL>
  >     SQL> SET FLAGS 'NOAUTO_OVERRIDE';

  > 例9: AUTO_INDEXオプションの使用

  >     SQL> set dialect 'SQL92';
  >     SQL> set flags 'AUTO_INDEX,INDEX_STATS';
  >     SQL> create table PERSON
  >     cont> (employee_id      integer primary key,
  >     cont>  manager_id       integer references PERSON (employee_id),
  >     cont>  last_name        char(30),
  >     cont>  first_name       char(30),
  >     cont>  unique (last_name, first_name));
  >     ~Ai create index "PERSON_PRIMARY_EMPLOYEE_ID"
  >     ~Ai larea length is 430
  >     ~Ai storage area (default) larea=57
  >     ~Ai create sorted index, ikey_len=5
  >     Sort    Get     Retrieval sequentially of relation PERSON
  >     ~Ai create index partition, node=430 %fill=0
  >     ~Ai create index "PERSON_FOREIGN1"
  >     ~Ai larea length is 215
  >     ~Ai storage area is shared: larea=57
  >     ~Ai create sorted index, ikey_len=5
  >     Sort    Get     Retrieval sequentially of relation PERSON
  >     ~Ai create index partition, node=0 %fill=0
  >     ~Ai create index "PERSON_UNIQUE1"
  >     ~Ai larea length is 215
  >     ~Ai storage area is shared: larea=57
  >     ~Ai create sorted index, ikey_len=62
  >     Sort    Get     Retrieval sequentially of relation PERSON
  >     ~Ai create index partition, node=0 %fill=0
  >     SQL>
  >     SQL> show table (index) person
  >     Information for table PERSON

  >     Indexes on table PERSON:
  >     PERSON_FOREIGN1                 with column MANAGER_ID
  >       Duplicates are allowed
  >       Type is Sorted
  >       Key suffix compression is DISABLED

  >     PERSON_PRIMARY_EMPLOYEE_ID      with column EMPLOYEE_ID
  >       No Duplicates allowed
  >       Type is Sorted
  >       Key suffix compression is DISABLED
  >       Node size  430

  >     PERSON_UNIQUE1                  with column LAST_NAME
  >                                     and column FIRST_NAME
  >       Duplicates are allowed
  >       Type is Sorted
  >       Key suffix compression is DISABLED
  >     SQL>

  > 例10: WATCH_CALLオプションの使用

  > この例は、INSERT文に対するWATCH_CALLの出力を示しています。これにより、AFTER INSERTトリガー（AFTER_INSERT）が実行され、SQLファンクションWRITE_TEXTがコールされ、入力データがトレースされています。次に、OPTIMIZE AS句を使用して名前が付けられた問合せがトレースされています。

  >     SQL> insert into SAMPLE_T values ('Fred');
  >     ~Xa: routine "(unnamed)", user=SMITH
  >     ~Xa: routine "AFTER_INSERT", user=SMITH
  >     ~Xa: routine "WRITE_TEXT", user=SMITH
  >     ~Xt: Fred
  >     1 row inserted
  >     SQL> select * from SAMPLE_T
  >     cont>     optimize as LOOKUP_SAMPLE_T;
  >     ~Xa: routine "LOOKUP_SAMPLE_T", user=SMITH
  >      NEW_NAME
  >      Fred
  >     1 row selected

  > 例11: WATCH_OPENオプションの使用

  > この例は、例10と同じINSERT文に対するWATCH_OPENの出力を示しています。

  >     SQL> insert into SAMPLE_T values ('Fred');
  >     ~Xo: Start Request B667E51E3625026EB7FFF3F4D3A16DC3 (unnamed)
  >     ~Xo: Start Request A8568053FE5A1A0852A1BE83A884016F "AFTER_INSERT" (query)
  >     ~Xo: Start Request 08AE59062657299B4768F6C2DFB6928E "WRITE_TEXT" (stored)
  >     ~Xt: Fred
  >     1 row inserted
  >     SQL>
  >     SQL> select * from SAMPLE_T
  >     cont>     optimize as LOOKUP_SAMPLE_T;
  >     ~Xo: Start Request F6025FAB1DD36B0DE0E52F3A9641BC5F "LOOKUP_SAMPLE_T" (query)
  >      NEW_NAME
  >      Fred
  >      Fred
  >     2 rows selected

  > 例12: アプリケーション・プログラムからのSET FLAGSの使用

  > SET FLAGS文は、次の2つのいずれかの方法を使用して動的SQLから実行できます。

  > - 1つ目は、文字列リテラルを渡して直接実行する方法です。SET FLAGSの文字列リテラル引数をEXECUTE IMMEDIATEの文字列リテラル引数に正しく組み込むには、一重引用符を二重にする必要があります。

  > - 2つ目は、SET FLAGS文全体をEXECUTE IMMEDIATEのパラメータに渡す方法です。

  >     exec sql
  >         execute immediate 'set flags ''strategy''';

  > SET FLAGS文全体をEXECUTE IMMEDIATEのパラメータに組み込むことができます。

  >     exec sql
  >         execute immediate :set_flags_text;

  > SET FLAGSを複数回実行する場合、これを動的文（PREPARE）として準備し、複数回実行するためにこの文の名前を使用できます。入力マーカー（?）は、前に準備された文を実行するために各コールで代用されます。

  >     #include <string.h>
  >     #include <sql_rdb_headers.h>

  >     void main ()
  >     {
  >     int SQLCODE;
  >     char myflags[40];

  >     exec sql
  >         prepare set_flags_stmt from 'set flags ?';
  >     if (SQLCODE != 0)
  >         sql_signal ();

  >     strcpy (myflags, "transaction,item_list");
  >     exec sql
  >         execute set_flags_stmt using :myflags;
  >     if (SQLCODE != 0)
  >         sql_signal ();

  >     exec sql
  >         start transaction;
  >     if (SQLCODE != 0)
  >         sql_signal ();

  >     strcpy (myflags, "notransaction,noitem_list");
  >     exec sql
  >         execute set_flags_stmt using :myflags;
  >     if (SQLCODE != 0)
  >         sql_signal ();

  >     exec sql
  >         rollback;
  >     if (SQLCODE != 0)
  >         sql_signal ();
  >     }

  > 例13: CHRONO_FLAGオプションの使用

  >     SQL> set flags 'chrono_fla(2),transaction';
  >     SQL> start transaction;
  >      ATTACH #1, 29-NOV-2003 10:08:37.51
  >     ~T Compile transaction (1) on db: 1
  >     ~T Transaction Parameter Block: (len=2)
  >     0000 (00000) TPB$K_VERSION = 1
  >     0001 (00001) TPB$K_WRITE (read write)
  >      ATTACH #1, 29-NOV-2003 10:08:37.58
  >     ~T Start_transaction (1) on db: 1, db count=1
  >     SQL> rollback;
  >      ATTACH #1, 29-NOV-2003 10:08:46.74
  >     ~T Rollback_transaction (1) on db: 1
  >     SQL> rollback;
  >      ATTACH #1, 29-NOV-2003 10:08:46.74
  >     ~T Rollback_transaction (1) on db: 1
  >     SQL>

  > 例14: REBUILD_SPAM_PAGESオプションの使用

  > 表または索引の行の長さまたはTHRESHOLDS句を変更する場合、論理領域の対応するSPAMページの再構成が必要な場合があります。デフォルトでは、これらのDDLコマンドによりAIPが更新され、SPAMページの再構成が必要であることを示すフラグが設定されます。ただし、このフラグは、トランザクションに対してCOMMITを実行する前に設定できます。これにより、再構成はこのトランザクション内で行われます。

  > 次の例は、EMPLOYEES表の簡単な変更を示しています（この例では、一連のUNIFORM領域にマップされています）。フラグSTOMAP_STATSを使用して、ALTER文およびCOMMIT文からより多くの情報をトレースできるようにしています。

  >     SQL> set transaction read write;
  >     SQL>
  >     SQL> set flags 'stomap_stats';
  >     SQL>
  >     SQL> alter table EMPLOYEES
  >     cont>     add column MANAGERS_COMMENTS varchar(300);
  >     ~As: reads: async 0 synch 94, writes: async 18 synch 1
  >     SQL>
  >     SQL> alter storage map EMPLOYEES_MAP
  >     cont>     store
  >     cont>         using (EMPLOYEE_ID)
  >     cont>             in EMPIDS_LOW
  >     cont>           (thresholds (34,76,90))
  >     cont>                 with limit of ('00200')
  >     cont>             in EMPIDS_MID
  >     cont>           (thresholds (34,76,90))
  >     cont>                 with limit of ('00400')
  >     cont>             otherwise in EMPIDS_OVER
  >     cont>           (thresholds (34,76,90));
  >     ~As locking table "EMPLOYEES" (PR -> PU)
  >     ~As: removing superseded routine EMPLOYEES_MAP
  >     ~As: creating storage mapping routine EMPLOYEES_MAP (columns=1)
  >     ~As: reads: async 0 synch 117, writes: async 56 synch 0
  >     SQL>
  >     SQL> set flags 'rebuild_spam_pages';
  >     SQL>
  >     SQL> commit;
  >     %RDMS-I-LOGMODVAL,     modified record length to 423
  >     %RDMS-I-LOGMODVAL,     modified space management thresholds to (34%, 76%, 90%)
  >     %RDMS-I-LOGMODVAL,     modified record length to 423
  >     %RDMS-I-LOGMODVAL,     modified space management thresholds to (34%, 76%, 90%)
  >     %RDMS-I-LOGMODVAL,     modified record length to 423
  >     %RDMS-I-LOGMODVAL,     modified space management thresholds to (34%, 76%, 90%)
  >     SQL>

  > メッセージLOGMODVALは、パーティションごとに1つずつ、記憶域マップの各論理領域に対して表示されます。

  > この再構成アクションはUNIFORM記憶域に対してのみ適用されます。また、SPAMページを再構成するためにSPAMページおよびデータ・ページが読み取られるため、多大なI/Oが生じる可能性があります。