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

戻る
戻る
 
次へ
次へ
 


SET HOLD CURSORS文

事前に定義されていない保持可能カーソルのセッションのデフォルト属性を指定します。

環境

SET HOLD CURSORS文は次の環境で使用できます。


形式



引数

variable

string-literal

保持可能カーソルの属性を指定します。次の値があります。


使用方法


例1: 保持可能カーソルのセッションのデフォルト属性の設定


SQL> ATTACH 'FILENAME mf_personnel';
SQL> --
SQL> -- Define the session default
SQL> --
SQL> SET HOLD CURSORS 'ON ROLLBACK';
SQL> --
SQL> -- Declare the cursor
SQL> --
SQL> DECLARE curs1 CURSOR FOR
cont> SELECT first_name, last_name FROM employees;
SQL> OPEN curs1;
SQL> FETCH curs1;
 FIRST_NAME   LAST_NAME
 Terry        Smith
SQL> FETCH curs1;
 FIRST_NAME   LAST_NAME
 Rick         O'Sullivan
SQL> DELETE FROM employees WHERE CURRENT OF curs1;
1 row deleted
SQL> ROLLBACK;
SQL> FETCH curs1;
 FIRST_NAME   LAST_NAME
 Stan         Lasch
SQL> COMMIT;
SQL> FETCH curs1;
%SQL-F-CURNOTOPE, Cursor CURS1 is not opened

例2: 保持可能カーソルのセッションのデフォルト属性のオーバーライド


SQL> -- Set the session default
SQL> --
SQL> SET HOLD CURSORS 'ALL';
SQL> --
SQL> -- Declare the cursor without a WITH HOLD clause
SQL> --
SQL> DECLARE curs2 CURSOR FOR
cont> SELECT first_name, last_name FROM employees;
SQL> OPEN curs2;
SQL> FETCH curs2;
 FIRST_NAME   LAST_NAME
 Terry        Smith
SQL> FETCH curs2;
 FIRST_NAME   LAST_NAME
 Rick         O'Sullivan
SQL> ROLLBACK;
SQL> FETCH curs2;
 FIRST_NAME   LAST_NAME
 Stan         Lasch
SQL> COMMIT;
SQL> FETCH curs2;
 FIRST_NAME   LAST_NAME
 Susan        Gray
SQL> CLOSE curs2;
SQL> FETCH curs2;
%SQL-F-CURNOTOPE, Cursor CURS2 is not opened
SQL> --
SQL> -- Declare the cursor overriding the session default by
SQL> -- specifying the WITH HOLD clause
SQL> --
SQL> DECLARE curs3 CURSOR
cont> WITH HOLD PRESERVE ON COMMIT
cont> FOR SELECT first_name, last_name FROM employees;
SQL> OPEN curs3;
SQL> FETCH curs3;
 FIRST_NAME   LAST_NAME
 Terry        Smith
SQL> FETCH curs3;
 FIRST_NAME   LAST_NAME
 Rick         O'Sullivan
SQL> COMMIT;
SQL> FETCH curs3;
 FIRST_NAME   LAST_NAME
 Stan         Lasch
SQL> ROLLBACK;
SQL> FETCH curs3;
%SQL-F-CURNOTOPE, Cursor CURS3 is not opened


SET IDENTIFIER CHARACTER SET文

モジュールまたは対話型SQLセッションの識別子キャラクタ・セットを指定します。

環境

SET IDENTIFIER CHARACTER SET文は次の環境で使用できます。


形式




引数

'string-literal'
parameter parameter-marker

表名および列名など、データベース・オブジェクト名に使用されるキャラクタ・セットを指定します。runtime-optionsの値は有効なキャラクタ・セットである必要があります。使用可能なキャラクタ・セットおよびオプション値のリストは、第2.1.5項を参照してください。

使用方法

SQLモジュール言語およびプリコンパイルされたSQLにおけるモジュールのキャラクタ・セットの設定の詳細は、第3.2節および「DECLARE MODULE文」を参照してください。


例1: 対話型セッションの識別子キャラクタ・セットの設定


SQL> show character sets;
Default character set is DEC_KANJI
National character set is DEC_KANJI
Identifier character set is SHIFT_JIS
Literal character set is SHIFT_JIS
Display character set is SHIFT_JIS
SQL> set identifier character set 'DEC_KANJI';
SQL> show character sets;
Default character set is DEC_KANJI
National character set is DEC_KANJI
Identifier character set is DEC_KANJI
Literal character set is SHIFT_JIS
Display character set is SHIFT_JIS


SET KEYWORD RULES文

現在のアタッチで識別子をキーワードとして使用可能かどうかを指定します。

環境

SET KEYWORD RULES文は次の環境で使用できます。


形式




引数

'string-literal'
parameter parameter-marker

次のいずれかにする必要があるruntime-optionsの値を指定します。

他のすべてのオプションでは、識別子としてキーワードを使用することは強制的に拒否されます。動作の相違を確認するには、例を参照してください。


使用方法


例1: SQL99へのキーワード・ルール特性の設定


SQL> SET KEYWORD RULES 'SQL99';
SQL> --
SQL> -- Because NATIONAL is a keyword, SQL returns an error message.
SQL> --
SQL> CREATE DOMAIN NATIONAL CHAR (2);
%SQL-F-RES_WORD_AS_IDE, Keyword NATIONAL used as an identifier
SQL> --
SQL> -- Enclose NATIONAL in double quotation marks.
SQL> --
SQL> CREATE DOMAIN "NATIONAL" CHAR (2);
SQL> --

例2: SQLV40へのキーワード・ルール特性の設定


SQL> SET KEYWORD RULES 'SQLV40';
SQL> --
SQL> -- You can use a keyword as an identifier.
SQL> --
SQL> CREATE DOMAIN NATIONAL CHAR (2);
%SQL-I-DEPR_FEATURE, Deprecated Feature: Keyword national used as an identifier
SQL> --


SET LITERAL CHARACTER SET文

モジュールまたは対話型SQLセッションのリテラル・キャラクタ・セットを指定します。

環境

SET LITERAL CHARACTER SET文は次の環境で使用できます。


形式




引数

'string-literal'
parameter parameter-marker

キャラクタ・セットまたは各国語キャラクタ・セットによって修飾されないリテラルのキャラクタ・セットを指定します。runtime-optionsの値は有効なキャラクタ・セットである必要があります。使用可能なキャラクタ・セットとオプション値のリストは、第2.1節を参照してください。

使用方法


例1: 対話型セッションのリテラル・キャラクタ・セットの設定


SQL> show character sets;
Default character set is DEC_KANJI
National character set is DEC_KANJI
Identifier character set is DEC_KANJI
Literal character set is SHIFT_JIS
Display character set is SHIFT_JIS
SQL> set literal character set 'DEC_KANJI';
SQL> show character sets;
Default character set is DEC_KANJI
National character set is DEC_KANJI
Identifier character set is DEC_KANJI
Literal character set is DEC_KANJI
Display character set is SHIFT_JIS


SET NAMES文

セッションのデフォルト・キャラクタ・セット、識別子キャラクタ・セットおよびリテラル・キャラクタ・セットを指定します。SET NAMES文では、SQLモジュール言語の文字パラメータも指定されます。

環境

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


形式




引数

'string-literal'
parameter parameter-marker

セッションのデフォルト・キャラクタ・セット、識別子キャラクタ・セットおよびリテラル・キャラクタ・セットに使用されるキャラクタ・セットを指定します。runtime-optionsの値は有効なキャラクタ・セットである必要があります。使用可能なキャラクタ・セットおよびオプション値のリストは、第2.1.5項を参照してください。

使用方法

SQLモジュール言語およびプリコンパイルされたSQLにおけるモジュールのキャラクタ・セットの設定の詳細は、第3.2節および「DECLARE MODULE文」を参照してください。


例1: 対話型セッションのデフォルト・キャラクタ・セット、識別子キャラクタ・セットおよびリテラル・キャラクタ・セットの設定


SQL> show character sets;
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
SQL> --
SQL> set names 'DEC_KANJI';
SQL> show character sets;
Default character set is DEC_KANJI
National character set is DEC_MCS
Identifier character set is DEC_KANJI
Literal character set is DEC_KANJI
Display character set is UNSPECIFIED
SQL> --
SQL> -- Specifying a different default character set
SQL> --
SQL> set default character set 'DEC_KOREAN';
SQL> show character sets;
Default character set is DEC_KOREAN
National character set is DEC_MCS
Identifier character set is DEC_KANJI
Literal character set is DEC_KANJI
Display character set is UNSPECIFIED
SQL>


SET NATIONAL CHARACTER SET文

モジュールまたは対話型SQLセッションの各国語キャラクタ・セットを指定します。

環境

SET NATIONAL CHARACTER SET文は次の環境で使用できます。


形式




引数

'string-literal'
parameter parameter-marker

セッションの各国語キャラクタ・セットを指定します。runtime-optionsの値は有効なキャラクタ・セットである必要があります。使用可能なキャラクタ・セット名およびオプション値のリストは、第2.1節を参照してください。

使用方法

SQLモジュール言語およびプリコンパイルされたSQLにおけるモジュールのキャラクタ・セットの設定の詳細は、第3.2節および「DECLARE MODULE文」を参照してください。


例1: 対話型セッションの各国語キャラクタ・セットの設定


SQL> show character sets;
Default character set is DEC_KANJI
National character set is DEC_MCS
Identifier character set is SHIFT_JIS
Literal character set is SHIFT_JIS
Display character set is SHIFT_JIS
SQL> set national character set 'DEC_KANJI';
SQL> show character sets;
Default character set is DEC_KANJI
National character set is DEC_KANJI
Identifier character set is SHIFT_JIS
Literal character set is SHIFT_JIS
Display character set is SHIFT_JIS


SET OPTIMIZATION LEVEL文

問合せの最適化特性に現在のセッションのデフォルトを指定できるようにします。

この文では、DEFAULTを使用してセッションのデフォルトをリセットしたり、SELECTIVITYまたはFAST FIRSTまたはTOTAL TIME最適化に対して1つ以上のキーワードを指定することが可能です。

この文は、対話型SQLにおける後続のすべての問合せコンパイルや、動的SQLを使用して指定した問合せに影響します。

SQLモジュール言語およびプリコンパイラ言語における最適化レベルの設定の詳細は、第3章および第4章を参照してください。


環境

SET OPTIMIZATION LEVEL文は次の環境で使用できます。


形式





引数

optimization-level

セッションのデフォルトをリセットするために使用するオプティマイザ計画を指定します。渡される文字列またはパラメータ値は、書式設定されたキーワード値のリストである必要があります。次のオプションから選択できます。

TOTAL TIMEオプションまたはFAST FIRSTオプションの1つのみを選択できます。AGGRESSIVE SELECTIVITYオプションまたはSAMPLED SELECTIVITYオプションの1つのみを選択できます。キーワードを区切るにはカンマを使用し、リストは丸カッコで囲みます。DEFAULTが選択されている場合、他のオプションを含めることはできません。

'string-literal'
parameter parameter-marker

カンマで区切ったキーワードのリストである必要があるruntime-optionsの値を指定します。

使用方法


例1: 最適化レベルの設定

次の例では、問合せを実行する前にRDMS$DEBUG_FLAGS論理名をSTRATEGYに定義することが重要です。


SQL> ATTACH 'FILENAME personnel';
SQL> --
SQL> -- No optimization level has been selected.  The optimizer
SQL> -- selects the fast-first (FFirst) retrieval strategy to
SQL> -- retrieve the rows from the EMPLOYEES table in the
SQL> -- following query:
SQL> --
SQL> SELECT EMPLOYEE_ID, LAST_NAME
cont>  FROM EMPLOYEES
cont>  WHERE EMPLOYEE_ID IN ('00167', '00168');
Leaf#01 FFirst RDB$RELATIONS Card=19
  BgrNdx1 RDB$REL_REL_NAME_NDX [1:1] Fan=8
Sort
Cross block of 2 entries
  Cross block entry 1
    Leaf#01 BgrOnly RDB$RELATION_FIELDS Card=71
      BgrNdx1 RDB$RFR_REL_NAME_FLD_ID_NDX [1:1] Fan=8
  Cross block entry 2
    Get     Retrieval by index of relation RDB$FIELDS
      Index name  RDB$FIELDS_NAME_NDX [1:1]  Direct lookup
Leaf#01 FFirst EMPLOYEES Card=100
  BgrNdx1 EMP_EMPLOYEE_ID [1:1...]2 Fan=17
 EMPLOYEE_ID   LAST_NAME
 00167         Kilpatrick
 00168         Nash
2 rows selected
SQL> --
SQL> -- Use the SET OPTIMIZATION LEVEL statement to specify that
SQL> -- you want the total-time (BgrOnly) retrieval strategy to
SQL> -- be used.  Note that when the previous query is executed
SQL> -- again, the total-time (BgrOnly) retrieval strategy is
SQL> -- selected, instead of fast-first.
SQL> --
SQL> SET OPTIMIZATION LEVEL 'TOTAL TIME';
SQL> SELECT EMPLOYEE_ID, LAST_NAME
cont>  FROM EMPLOYEES
cont>  WHERE EMPLOYEE_ID IN ('00167', '00168');
Leaf#01 BgrOnly EMPLOYEES Card=100
  BgrNdx1 EMP_EMPLOYEE_ID [1:1...]2 Fan=17
 EMPLOYEE_ID   LAST_NAME
 00167         Kilpatrick
 00168         Nash
2 rows selected
SQL> --
SQL> -- When the SET OPTIMIZATION LEVEL 'DEFAULT' statement
SQL> -- is specified, either the fast-first or total-time
SQL> -- strategy will be selected.  The fast-first strategy
SQL> -- will be tried first, then total-time will be selected
SQL> -- if it will retrieve the rows faster than the fast-first
SQL> -- strategy.
SQL> --
SQL> SET OPTIMIZATION LEVEL 'DEFAULT';
SQL> --
SQL> -- Because the fast-first strategy is faster than the
SQL> -- total-time strategy for this query, the fast-first
SQL> -- stragegy is used to retrieve the rows.
SQL> --
SQL> SELECT EMPLOYEE_ID, LAST_NAME
cont>  FROM EMPLOYEES
cont>  WHERE EMPLOYEE_ID IN ('00167', '00168');
Leaf#01 FFirst EMPLOYEES Card=100
  BgrNdx1 EMP_EMPLOYEE_ID [1:1...]2 Fan=17
 EMPLOYEE_ID   LAST_NAME
 00167         Kilpatrick
 00168         Nash
2 rows selected

例2: sampled selectivityの使用

この例は、問合せのコンパイル前におけるSET OPTIMIZATION LEVELコマンドの使用とその結果としてのEstimの使用を示しています。推定(34行)は、最終的な結果である37行に非常に近くなっています。


SQL> set flags 'strategy,detail,execution';
SQL> set optimization level 'total time, sampled selectivity';
SQL> select * from employees where employee_id between '00000' and '00200';
~Estim EMP_EMPLOYEE_ID Sorted: Split lev=2, Seps=2 Est=34
~Estim EMP_EMPLOYEE_ID Sorted: Split lev=2, Seps=2 Est=34
~S#0005
Tables:
    0 = EMPLOYEES
Leaf#01 BgrOnly 0:EMPLOYEES Card=100
  Bool: (0.EMPLOYEE_ID >= '00000' AND (0.EMPLOYEE_ID <= '00200')
  BgrNdx1 EMP_EMPLOYEE_ID [1:1] Fan=17
    Keys: (0:EMPLOYEE_ID >= '00000') AND 0.EMPLOYEE_ID <= '00200')
~Estim EMP_EMPLOYEE_ID Sorted: Split lev=2, Seps=1 Est=17
~E#0005.01(1) Estim   Index/Estimate 1/17
~E#0005.01(1) Bgrndx1 EofData  DBKeys=37  Fetches=0+0  RecsOut=0  #Bufs=30
 EMPLOYEE_ID   LAST_NAME        FIRST_NAME  MIDDLE_INITIAL  ADDRESS_DATA1             ADRESS_DATA_2
   CITY                   STATE   POSTAL_CODE  SEX    BIRTHDAY     STATUS_CODE
 00190         O'Sullivan       Rick        G.              78 Mason Rd.               NULL
   Fremont                NH      03044        M      12-Jan-1923  1
   .
   .
   .
~E#005.01(1) Fin     Buf      DBKeys=37  Fetches=0+32  RecsOut=37
 00174         Myotte           Daniel      V.              95 Princeton Rd.           NULL
   Bennington             MA      03442        M      17-Jan-1948  1

   37 rows selected
SQL>