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

戻る
戻る
 
次へ
次へ
 


SET PAGE LENGTH文

ページのサイズを設定するために使用されます。現在、これは、SQL HELPコマンドのページ区切り制御でのみ使用されます。

環境

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


形式



使用方法


この例では、SET PAGE LENGTHコマンドを使用してHELPのページ区切りの長さを変更しています。


SQL> set page length 40;
SQL> show display
Output of the query header is enabled
Output of the row counter is enabled
Output using edit strings is enabled
Page length is set to 40 lines
Line length is set to 80 bytes
Display NULL values using "NULL"


SET QUERY文

SET QUERY文を使用して、SQLセッション内の問合せ実行を制御します。


環境

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

SET QUERYコマンドの一部のオプションは対話型SQLでのみ使用できます。


形式



引数

CONFIRM

問合せの行が実際に返される前に、問合せのコストをI/Oの観点からプレビューできます。次に例を示します。


SQL> SELECT * FROM EMPLOYEES;
Estimate of query cost: 52 I/O s, rows to deliver: 100
Do you wish to cancel this query (No)? YES
%SQL-F-QUERYCAN, Query cancelled at user s request

問合せによっては、多数のI/O操作の実行、多数の行の取得、またはこれらの両方が行われる場合があります。SET QUERY CONFIRMを使用すると、推定される問合せコストが表示されます。コストが過剰だと思われる場合は、Noと応答して問合せを取り消すことができます。処理を続行する場合は、Yesと応答します。

SET QUERY CONFIRM文は、対話型SQLでのみ使用できます。

EXECUTION LIMIT

このオプションにより、問合せの実行に経過時間およびCPUタイムの制限が課されます。このコマンドは、Rdbサーバー・プロセス内で実行されるすべての後続の問合せに影響します。この文を実行するには、データベースにアタッチされている必要があります。この文は、現在の接続のみではなく、現在のプロセスに関するすべてのアタッチに影響します。

問合せの実行に使用される経過時間またはCPUタイムの長さを制限できます。経過時間またはCPUタイムの制限に達するまでに問合せが完了しない場合、エラー・メッセージが返されます。

デフォルトでは、問合せの実行時間に制限はありません。SECONDSキーワードおよびMINUTESキーワードを省略した場合、デフォルトはSECONDSです。動的SQLオプションは、モジュールのコンパイル修飾子から継承されます。

注意

問合せ時間の制限を指定すると、特定の状況下ではアプリケーション障害が発生する可能性があります。たとえば、オフピーク時には正常に動作するアプリケーションでも、ピーク時に実行するとデータベースの負荷が原因で障害が発生する可能性があります。

分数または秒数には正の整数を使用します。負の整数は無効で、ゼロは制限なしを意味します。設定された制限を超えると、問合せは取り消され、エラー・メッセージが表示されます。SET QUERY LIMITを使用してCPUタイム制限、経過時間制限および行制限を設定する場合、いずれか最初に達した値によって問合せは停止されます。

データベース管理者およびアプリケーション開発者はこの機能を使用することにより、時間がかかるのみでなくたいていは非生産的な問合せをユーザーが実行してシステムに負荷をかけすぎるのを防止できます。データベース管理者は、オプションの制限を設定することにより、システムのパフォーマンスを管理し、不要なリソース使用率を削減できます。

EXECUTION NOLIMIT

このオプションにより、SET QUERY EXECUTION LIMITコマンドによって課される制限が削除されます。

次のいずれかのオプションを使用します。

EXECUTION NOLIMITは、SET QUERY EXECUTION LIMITを使用して任意のオプションに制限ゼロを割り当てるのと同義です。

LIMIT

問合せによって生成される出力を限定する制限を設定します。

これらの制限を設定するために使用されるメカニズムは、問合せガバナーと呼ばれます。問合せガバナーを使用して制限を設定する3つの方法を次に示します。

行数または秒数には正の整数を使用します。負の整数は無効で、ゼロは制限なしを意味します。設定された制限を超えると、問合せは取り消され、エラー・メッセージが表示されます。時間制限と行制限の両方を設定する場合、いずれか最初に達した値によって出力は停止されます。

アプリケーション開発者はこの機能を使用して、ユーザーがシステムに負荷をかけすぎるのを防止できます。データベース管理者は、オプションの制限を設定することにより、システムのパフォーマンスを管理し、不要なリソース使用率を削減できます。

NOCONFIRM

SET QUERY CONFIRMを使用して以前に有効化された問合せ確認ダイアログを無効にします。SET QUERY NOCONFIRM文は、対話型SQLでのみ使用できます。

NOLIMIT

このオプションにより、SET QUERY LIMITコマンドによって課される制限が削除されます。

次のいずれかのオプションを使用します。

NOLIMITは、SET QUERY LIMITを使用して任意のオプションに制限ゼロを割り当てるのと同義です。

rows_value

この引数は、SET QUERY引数に指定される行数を表します。この引数には、数値リテラル、パラメータ名(対話型SQLの場合)またはパラメータ・マーカー(動的SQLの場合)を使用できます。

time_value

この引数は、SET QUERY文に指定される分数または秒数を表します。この引数には、数値リテラル、パラメータ名(対話型SQLの場合)またはパラメータ・マーカー(動的SQLの場合)を使用できます。

Example 1: 対話型SQLセッション内の行制限を設定する構文を示しています。


SQL> set query limit rows 10000;
SQL> show query limit;
Query limit Time is OFF
Query limit Row count is 10000 rows
Query limit CPU time is OFF
Execution limit CPU time is OFF
Execution limit Elapsed time is OFF
Execution limit Row count is OFF
SQL> set query nolimit rows;
SQL> show query limit;
Query limit Time is OFF
Query limit Row count is OFF
Query limit CPU time is OFF
Execution limit CPU time is OFF
Execution limit Elapsed time is OFF
Execution limit Row count is OFF

例2: SET QUERYを使用して問合せに対して2秒間の経過時間制限を設定し、表示されたエラー・メッセージを示しています。


SQL> set query execution limit elapsed time 2 seconds;
SQL> delete from EMPLOYEES;
%RDB-E-EXQUOTA, Oracle Rdb runtime quota exceeded
-RDMS-E-MAXTIMLIM, query governor maximum timeout has been reached
SQL> set query execution nolimit elapsed time;


SET QUIET COMMIT文

COMMIT文またはROLLBACK文が実行されたときにアクティブなトランザクションがない場合のエラー・レポートの動作を制御できます。デフォルトでは、アクティブなトランザクションがないときにCOMMIT文またはROLLBACK文が実行されると、エラーが発生します。SET QUIET COMMIT文をONに設定すると、アクティブなトランザクションがない場合でもCOMMIT文またはROLLBACK文は正常に実行されます。

環境

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


形式



引数

on-or-off-value

ONキーワードまたはOFFキーワードが含まれる文字列リテラルまたはホスト変数を指定します。

ON引数により、アクティブなトランザクションがないときにCOMMIT文またはROLLBACK文が実行されても、エラーが発生しないよう指定します。OFF引数により、アクティブなトランザクションがないときにCOMMIT文またはROLLBACK文が実行されると、エラーが発生するように指定します。ON引数およびOFF引数は任意の大/小文字(大文字のみ、小文字のみ、またはこれらの組合せ)を使用して指定できます。

デフォルトでは、アクティブなトランザクションがないときにCOMMIT文またはROLLBACK文が実行されると、エラーが発生します。このデフォルト設定は、この状況を検出する必要があるアプリケーションの下位互換性のために保持されています。


使用方法


例1: QUIET COMMITオプションのONおよびOFFの設定


SQL> COMMIT;
%SQL-F-NO_TXNOUT, No transaction outstanding
SQL> SET QUIET COMMIT 'ON';
SQL> ROLLBACK;
SQL> SET QUIET COMMIT 'OFF';
SQL> ROLLBACK;
%SQL-F-NO_TXNOUT, No transaction outstanding


SET QUOTING RULES文

二重引用符で囲まれた文字列を現在の接続で文字列リテラルまたはデリミタ付き識別子のどちらで解釈するかを指定します。

環境

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


形式




引数

'string-literal'
parameter parameter-marker

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

SQL99
SQL92 SQL89 MIA

二重引用符で囲まれた文字列がデリミタ付き識別子として解釈されるよう指定します。デリミタ付き識別子では大/小文字が区別されます。

ANSI/ISO SQL規格のネーミング規則に準拠するには、これらのオプションの1つを使用する必要があります。また、これらのオプションの1つを使用してマルチスキーマ・データベース・ネーミングを使用する必要があります。

SQLV40

二重引用符で囲まれた文字列が文字列リテラルとして解釈されるよう指定します。

デフォルトはSQLV40です。


使用方法


例1: SQL99への引用ルールの設定


SQL> SET QUOTING RULES 'SQL99';
SQL> --
SQL> -- SQL interprets double quotation marks as delimited identifiers.
SQL> --
SQL> CREATE TABLE "Employees_Table"
cont>  ("Employee_ID" CHAR(6),
cont>    "Employee_Name" CHAR (30));
SQL> --
SQL> -- SQL retains the upper- and lowercase letters within the identifier.
SQL> --
SQL> SHOW TABLE EMPLOYEES_TABLE
No tables found
SQL> SHOW TABLE "Employees_Table"
Information for table Employees_Table

Columns for table Employees_Table:
Column Name                     Data Type        Domain
-----------                     ---------        ------
Employee_ID                     CHAR(6)
Employee_Name                   CHAR(30)

   .
   .
   .

例2: SQLV40への引用ルールの設定


SQL> SET QUOTING RULES 'SQLV40';
SQL> --
SQL> -- When you set the quoting rules to SQLV40, SQL interprets double
SQL> -- quotation marks as string literals.
SQL> --
SQL> CREATE TABLE "Employees_Table"
%SQL-I-DEPR_FEATURE, Deprecated Feature: " used instead of ' for string
literal
CREATE TABLE "Employees_Table"
              ^
%SQL-W-LOOK_FOR_STT, Syntax error, looking for:
%SQL-W-LOOK_FOR_CON,            name, FROM,
%SQL-F-LOOK_FOR_FIN,    found Employees_Table instead
SQL> --
SQL> -- Although you can use double quotation marks for string literals, SQL
SQL> -- returns a deprecated feature message.
SQL> --
SQL> INSERT INTO EMPLOYEES
cont>       (EMPLOYEE_ID, LAST_NAME, STATUS_CODE)
cont> VALUES
cont>       ("00500", 'Toliver', '1');
%SQL-I-DEPR_FEATURE, Deprecated Feature: " used instead of ' for string
literal
1 row inserted
SQL> --


SET SCHEMA文

別のSET SCHEMA文が発行されるまでにおける、動的に準備および実行されたSQL文または対話型SQL文のSQLユーザー・セッションのデフォルト・スキーマ名を指定します。

1つのマルチスキーマ・データベース内では、異なるスキーマに存在する表を1つのSQL文で使用できますが、データベースが異なるスキーマの表の場合は使用できません。マルチスキーマ・データベースでオブジェクトを指定する場合にスキーマ名を省略すると、デフォルト・スキーマ名が使用されます。


環境

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


形式





引数

schema-expression

マルチスキーマ・データベースのデフォルト・スキーマ名を指定します。マルチスキーマ・データベースでオブジェクトを指定する場合にスキーマ名を省略すると、デフォルト・スキーマ名が使用されます。デフォルト・スキーマ名を指定しない場合、デフォルトでは、現行ユーザーのユーザー名が指定されます。

スキーマの詳細は、第2.2.15項を参照してください。

schema-parameter

デフォルト・スキーマを指定するプリコンパイルされたSQLのホスト言語変数またはSQLモジュール言語プロシージャの仮パラメータを指定します。スキーマ・パラメータには、スキーマ式が含まれている必要があります。

schema-parameter-marker

動的SQL文でパラメータ・マーカー(?)を指定します。スキーマ・パラメータ・マーカーでは、デフォルト・スキーマを指定するパラメータを参照します。スキーマ・パラメータ・マーカーには、スキーマ式が含まれるパラメータを指定する必要があります。

schema-string-literal

デフォルト・スキーマを指定する文字列リテラルを指定します。スキーマ文字列リテラルには、一重引用符で囲まれたスキーマ式が含まれる必要があります。

使用方法


例1: マルチスキーマ・データベースに表を作成するためのスキーマおよびカタログのデフォルトの設定

この例では、ユーザーELLINGSWORTHは、2つのデータベース(デフォルト・データベースであるpersonnelと、別名CORPを持つマルチスキーマのcorporate_dataデータベース)にアタッチします。ユーザーELLINGSWORTHは、corporate_dataデータベースに表を作成しようとしますが、エラー・メッセージが表示されます。これは、デフォルト・スキーマであるELLINGSWORTHがデフォルト・カタログに作成されていないためです。ユーザーELLINGSWORTHは、SET SCHEMA文およびSET CATALOG文を使用して、デフォルトをcorporate_dataデータベースのカタログADMINISTRATIONおよびスキーマACCOUNTINGに変更します。

SHOW DATABASE文を使用してデータベース設定を表示します。


SQL> ATTACH 'FILENAME personnel';
SQL> ATTACH 'ALIAS CORP FILENAME corporate_data';
SQL>  SHOW SCHEMAS;
Schemas in database with filename personnel
No schemas found
Schemas in database CORP
    "CORP.ADMINISTRATION".ACCOUNTING
    "CORP.ADMINISTRATION".PERSONNEL
    "CORP.ADMINISTRATION".RECRUITING
    "CORP.RDB$CATALOG".RDB$SCHEMA
SQL> CREATE TABLE CORP.BUDGET (COL1 REAL);
%SQL-F-SCHNOTDEF, Schema "CORP.RDB$CATALOG".CORP is not defined
SQL> --
SQL> -- SQL interprets CORP as schema name, and there is no
SQL> -- CORP schema in the default database.
SQL> --
SQL> -- Add quotation marks to designate qualifier CORP as an alias,
SQL> -- not the schema name.
SQL> --
SQL> SET QUOTING RULES 'SQL92';
SQL> CREATE TABLE "CORP.BUDGET" (COL1 REAL);
%SQL-F-SCHNOTDEF, Schema "CORP.RDB$CATALOG".ELLINGSWORTH is not defined
SQL> --
SQL> -- The default schema in the database with alias CORP
SQL> -- is the user name ELLINGSWORTH, but there is no
SQL> -- schema named ELLINGSWORTH.
SQL> --
SQL> -- Set the default schema to ACCOUNTING, and qualify it
SQL> -- with a delimited identifier containing the alias CORP and
SQL> -- the catalog ADMINISTRATION.  Now you can create the
SQL> -- table BUDGET within schema ACCOUNTING without qualifying
SQL> -- the table name.
SQL> --
SQL> SET SCHEMA '"CORP.ADMINISTRATION".ACCOUNTING';
SQL> CREATE TABLE BUDGET (COL1 REAL);
SQL> SHOW TABLES;
User tables in database with filename personnel
     CANDIDATES
     COLLEGES
     .
     .
     .
     User tables in database with alias CORP
     "CORP.ADMINISTRATION".ACCOUNTING.BUDGET
     .
     .
     .


SET SESSION AUTHORIZATION文

現在のデータベース・アタッチを別のユーザーに転送できます。

環境

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


形式




引数

host-variable

'literal-user-auth'

データベース・アタッチの転送先のユーザー名およびパスワードを文字列リテラルまたはホスト変数として指定します。host-variableを指定する場合、literal-user-authを文字列リテラルとして含める必要があります。

USER 'username'

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

USING 'password'

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

使用方法


例1: 別のユーザーのための現行データベース・アタッチの再使用


SQL> ATTACH 'FILENAME db$:personnel';
SQL> SET SESSION AUTHORIZATION 'USER ''SMITH'' USING ''SECRET1''';
SQL> SHOW PRIV ON DATABASE RDB$DBHANDLE
Privileges on Alias RDB$DBHANDLE
    (IDENTIFIER =[RDB,SMITH],ACCESS=SELECT+INSERT+UPDATE+DELETE+SHOW+CREATE+
     ALTER+DROP+DBCTRL+OPERATOR+DBADM+REFERENCES+SECURITY+DISTRIBTRAN)
SQL> SET SESSION AUTHORIZATION 'USER ''JAIN'' USING ''SECRET2''';
SQL> SHOW PRIV ON DATABASE RDB$DBHANDLE
Privileges on Alias RDB$DBHANDLE
    (IDENTIFIER =[RDB,JAIN],ACCESS=SELECT+INSERT+UPDATE+DELETE+SHOW+CREATE+
     ALTER+DROP+DBCTRL+OPERATOR+DBADM+REFERENCES+SECURITY+DISTRIBTRAN)