ページのサイズを設定するために使用されます。現在、これは、SQL HELPコマンドのページ区切り制御でのみ使用されます。
SET PAGE LENGTH文は次の環境で使用できます。
- 対話型SQL内
- ホスト言語プログラムに埋め込まれる場合
- SQLモジュールまたはその他の複合文のプロシージャの一部として
- 動的SQLで動的に実行される文として
- 整数値には10〜32767の値を指定してください。
- SET PAGE LENGTHを使用すると、ページ長を32000などの大きい値に設定することにより、ヘルプで実行されるページングを実質的に無効にできます。
- ページ長は対話型SQLの起動時に自動的に設定され、そのセッションのOpenVMS端末の設定に基づきます。
- SHOW DISPLAYコマンドを使用すると、現在定義されているページ長を表示できます。
この例では、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文を使用して、SQLセッション内の問合せ実行を制御します。
SET QUERY文は次の環境で使用できます。
- 対話型SQL内
- プリコンパイル対象のホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
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 TIME time_value [ SECONDS | MINUTES ]
- ELAPSED TIME time_value [ SECONDS | MINUTES ]
問合せの実行に使用される経過時間またはCPUタイムの長さを制限できます。経過時間またはCPUタイムの制限に達するまでに問合せが完了しない場合、エラー・メッセージが返されます。
デフォルトでは、問合せの実行時間に制限はありません。SECONDSキーワードおよびMINUTESキーワードを省略した場合、デフォルトはSECONDSです。動的SQLオプションは、モジュールのコンパイル修飾子から継承されます。
注意
問合せ時間の制限を指定すると、特定の状況下ではアプリケーション障害が発生する可能性があります。たとえば、オフピーク時には正常に動作するアプリケーションでも、ピーク時に実行するとデータベースの負荷が原因で障害が発生する可能性があります。
分数または秒数には正の整数を使用します。負の整数は無効で、ゼロは制限なしを意味します。設定された制限を超えると、問合せは取り消され、エラー・メッセージが表示されます。SET QUERY LIMITを使用してCPUタイム制限、経過時間制限および行制限を設定する場合、いずれか最初に達した値によって問合せは停止されます。
データベース管理者およびアプリケーション開発者はこの機能を使用することにより、時間がかかるのみでなくたいていは非生産的な問合せをユーザーが実行してシステムに負荷をかけすぎるのを防止できます。データベース管理者は、オプションの制限を設定することにより、システムのパフォーマンスを管理し、不要なリソース使用率を削減できます。
EXECUTION NOLIMIT
このオプションにより、SET QUERY EXECUTION LIMITコマンドによって課される制限が削除されます。次のいずれかのオプションを使用します。
- ELAPSED TIME
- CPU TIME
EXECUTION NOLIMITは、SET QUERY EXECUTION LIMITを使用して任意のオプションに制限ゼロを割り当てるのと同義です。
LIMIT
問合せによって生成される出力を限定する制限を設定します。これらの制限を設定するために使用されるメカニズムは、問合せガバナーと呼ばれます。問合せガバナーを使用して制限を設定する3つの方法を次に示します。
- ROWS rows_value
1つの問合せで返すことができる行数を制限して出力を制限します。問合せによって返される各行がオプティマイザによって計算され、行制限に達すると実行が停止されます。
デフォルトでは、フェッチされる行数は制限されません。動的SQLのデフォルトは、モジュールのコンパイル修飾子から継承されます。- TIME time_value [ SECONDS | MINUTES ]
問合せの実行を最適化するために使用される時間の合計を制限できます。問合せが最適化されておらず、経過時間合計の制限に達するまでに実行の準備が整わない場合、エラー・メッセージが返されます。
デフォルトでは、問合せのコンパイル時間に制限はありません。SECONDSキーワードおよびMINUTESキーワードを省略した場合、デフォルトはSECONDSです。
注意
問合せ時間の制限を指定すると、特定の状況下ではアプリケーション障害が発生する可能性があります。たとえば、オフピーク時には正常に動作するアプリケーションでも、ピーク時に実行するとデータベースの負荷が原因で障害が発生する可能性があります。
- CPU TIME time_value [ SECONDS | MINUTES ]
問合せの実行を最適化するために使用されるCPUタイムの合計を制限できます。問合せが最適化されておらず、CPUタイムの制限に達するまでに実行の準備が整わない場合、エラー・メッセージが返されます。
デフォルトでは、問合せのコンパイルのCPUタイムに制限はありません。SECONDSキーワードおよびMINUTESキーワードを省略した場合、デフォルトはSECONDSです。動的SQLオプションは、モジュールのコンパイル修飾子から継承されます。
行数または秒数には正の整数を使用します。負の整数は無効で、ゼロは制限なしを意味します。設定された制限を超えると、問合せは取り消され、エラー・メッセージが表示されます。時間制限と行制限の両方を設定する場合、いずれか最初に達した値によって出力は停止されます。
アプリケーション開発者はこの機能を使用して、ユーザーがシステムに負荷をかけすぎるのを防止できます。データベース管理者は、オプションの制限を設定することにより、システムのパフォーマンスを管理し、不要なリソース使用率を削減できます。
NOCONFIRM
SET QUERY CONFIRMを使用して以前に有効化された問合せ確認ダイアログを無効にします。SET QUERY NOCONFIRM文は、対話型SQLでのみ使用できます。NOLIMIT
このオプションにより、SET QUERY LIMITコマンドによって課される制限が削除されます。次のいずれかのオプションを使用します。
- ROWS
- TIME
- CPU TIME
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;
COMMIT文またはROLLBACK文が実行されたときにアクティブなトランザクションがない場合のエラー・レポートの動作を制御できます。デフォルトでは、アクティブなトランザクションがないときにCOMMIT文またはROLLBACK文が実行されると、エラーが発生します。SET QUIET COMMIT文をONに設定すると、アクティブなトランザクションがない場合でもCOMMIT文またはROLLBACK文は正常に実行されます。
SET QUIET COMMIT文は次の環境で使用できます。
- 対話型SQL内
- 動的SQLで動的に実行される文として
on-or-off-value
ONキーワードまたはOFFキーワードが含まれる文字列リテラルまたはホスト変数を指定します。ON引数により、アクティブなトランザクションがないときにCOMMIT文またはROLLBACK文が実行されても、エラーが発生しないよう指定します。OFF引数により、アクティブなトランザクションがないときにCOMMIT文またはROLLBACK文が実行されると、エラーが発生するように指定します。ON引数およびOFF引数は任意の大/小文字(大文字のみ、小文字のみ、またはこれらの組合せ)を使用して指定できます。
デフォルトでは、アクティブなトランザクションがないときにCOMMIT文またはROLLBACK文が実行されると、エラーが発生します。このデフォルト設定は、この状況を検出する必要があるアプリケーションの下位互換性のために保持されています。
- 次のオプションおよび修飾子には、各インタフェースにおけるSET QUIET COMMIT文と同じ効果があります。
- SQLモジュール言語ヘッダー・オプションにおけるQUIET COMMIT句
- SQLモジュール言語修飾子における/QUIET_COMMIT修飾子および/NOQUIET_COMMIT修飾子
- SQL言語プリコンパイラにおける/SQLOPTIONS=QUIET_COMMIT修飾子および/SQLOPTIONS=NOQUIET_COMMIT修飾子
- 複合文、ストアド・プロシージャまたはファンクション内でCOMMIT文またはROLLBACK文を発行する場合、トランザクションがアクティブでないときでも例外は発生しないため、SET QUIET COMMIT文を発行する必要はありません。実質的に、複合文、ストアド・プロシージャおよびファンクションにおいてはSET QUIET COMMIT文の動作は常にアクティブです。
例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文は次の環境で使用できます。
- 対話型SQL内
- プリコンパイル対象のホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
'string-literal'
次のいずれかにする必要があるruntime-optionsの値を指定します。
parameter parameter-marker
- SQL99
- SQL92
- SQL89
- MIA
- SQLV40
SQL99
二重引用符で囲まれた文字列がデリミタ付き識別子として解釈されるよう指定します。デリミタ付き識別子では大/小文字が区別されます。
SQL92 SQL89 MIAANSI/ISO SQL規格のネーミング規則に準拠するには、これらのオプションの1つを使用する必要があります。また、これらのオプションの1つを使用してマルチスキーマ・データベース・ネーミングを使用する必要があります。
SQLV40
二重引用符で囲まれた文字列が文字列リテラルとして解釈されるよう指定します。デフォルトはSQLV40です。
- SET DIALECT文がSET QUOTING RULES文の後に処理される場合、これにより、SET QUOTING RULES文の設定がオーバーライドされる場合があります。
- SET KEYWORD RULES文がSET QUOTING RULES文の後に処理される場合、これにより、SET QUOTING RULES文の設定がオーバーライドされる場合があります。
- SET QUOTING RULES文を指定すると、現在の接続のみに関する引用ルールが変更されます。SHOW CONNECTIONS文を使用して、接続の特性を表示します。
例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文が発行されるまでにおける、動的に準備および実行されたSQL文または対話型SQL文のSQLユーザー・セッションのデフォルト・スキーマ名を指定します。1つのマルチスキーマ・データベース内では、異なるスキーマに存在する表を1つのSQL文で使用できますが、データベースが異なるスキーマの表の場合は使用できません。マルチスキーマ・データベースでオブジェクトを指定する場合にスキーマ名を省略すると、デフォルト・スキーマ名が使用されます。
SET SCHEMA文は次の環境で使用できます。
- 対話型SQL内
- プリコンパイル対象のホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
schema-expression
マルチスキーマ・データベースのデフォルト・スキーマ名を指定します。マルチスキーマ・データベースでオブジェクトを指定する場合にスキーマ名を省略すると、デフォルト・スキーマ名が使用されます。デフォルト・スキーマ名を指定しない場合、デフォルトでは、現行ユーザーのユーザー名が指定されます。スキーマの詳細は、第2.2.15項を参照してください。
schema-parameter
デフォルト・スキーマを指定するプリコンパイルされたSQLのホスト言語変数またはSQLモジュール言語プロシージャの仮パラメータを指定します。スキーマ・パラメータには、スキーマ式が含まれている必要があります。schema-parameter-marker
動的SQL文でパラメータ・マーカー(?)を指定します。スキーマ・パラメータ・マーカーでは、デフォルト・スキーマを指定するパラメータを参照します。スキーマ・パラメータ・マーカーには、スキーマ式が含まれるパラメータを指定する必要があります。schema-string-literal
デフォルト・スキーマを指定する文字列リテラルを指定します。スキーマ文字列リテラルには、一重引用符で囲まれたスキーマ式が含まれる必要があります。
- SET SCHEMAを使用して設定するデフォルトのスキーマが存在しなくても、エラー・メッセージは発行されません。ただし、修飾されていない名前を指定してこのスキーマを参照すると、次の例に示すエラー・メッセージが表示されます。
SQL> ATTACH 'ALIAS CORP FILENAME corporate_data'; SQL> SHOW CATALOGS Catalogs in database CORP "CORP.ADMINISTRATION" "CORP.RDB$CATALOG" SQL> SHOW SCHEMAS Schemas in database with filename corporate_data ACCOUNTING PERSONNEL RECRUITING RDB$CATALOG.RDB$SCHEMA SQL> SET SCHEMA '"CORP.ADMINISTRATION".BOGUS'; SQL> CREATE TABLE NEWTABLE (COL1 REAL); %SQL-F-SCHNOTDEF, Schema BOGUS is not defined
二重引用符で囲まれている、マルチスキーマ・オブジェクト名の左端のペア(デリミタ付き識別子)は大文字で指定する必要があります。他のマルチスキーマ・ネーミング規則の詳細は、第2.2.11項を参照してください。デリミタ付き識別子を小文字で指定すると、次のエラー・メッセージが表示されます。
SQL> set schema '"corp.administration".accounting'; SQL> CREATE TABLE NEWTABLE (COL1 REAL); %SQL-F-NODEFDB, There is no default database SQL> set schema '"CORP.ADMINISTRATION".accounting'; SQL> CREATE TABLE NEWTABLE (COL1 REAL); SQL>
- SET SCHEMA文は、動的でない文には使用できません。
例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文は次の環境で使用できます。
- 対話型SQL内
- プリコンパイル対象のホスト言語プログラムに埋め込まれる場合
- SQLモジュールのプロシージャの一部として
- 動的SQLで動的に実行される文として
host-variable
'literal-user-auth'
データベース・アタッチの転送先のユーザー名およびパスワードを文字列リテラルまたはホスト変数として指定します。host-variableを指定する場合、literal-user-authを文字列リテラルとして含める必要があります。USER 'username'
データベース・システムでの権限チェックに使用されるオペレーティング・システムのユーザー名を指定する文字列リテラルです。USING 'password'
USER句で指定されているユーザー名に対するユーザーのパスワードを指定する文字列リテラルです。
- セッション認可を設定するには、データベースに対するSELECT権限が必要です。
- 指定したユーザーおよびパスワード(USING句内)は、有効なOpenVMSユーザーの認可である必要があります。
- 操作が成功すると、SESSION_USERおよびSESSION_UIDは変更され、指定したOpenVMSユーザーが反映されます。
- この文によるセッション認可の変更時にはトランザクションをアクティブにすることはできません。
例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)