ヘッダーをスキップ
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を使用します。

  • 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が生じる可能性があります。