12.41 SETシステム変数の一覧
12.41.1 SET APPI[NFO]{ON | OFF | テキスト}
DBMS_APPLICATION_INFOパッケージを使用して、スクリプトの自動登録を設定します。
この設定によって、各スクリプトのパフォーマンスおよびリソースの使用状況をDBAが監視できます。V$SESSIONおよびV$SQLAREA仮想表のMODULE列には、登録名が表示されます。DBMS_APPLICATION_INFO.READ_MODULEプロシージャを使用して、登録名を読み取ることもできます。
ONを指定すると、@コマンド、@@コマンドまたはSTARTコマンドによって起動されたスクリプトが登録されます。OFFを指定すると、スクリプトの登録が無効になります。そのかわりに、テキストの現在の設定値が登録されます。textには、スクリプトが実行されていない場合、またはAPPINFOがOFFの場合(デフォルト)に登録するテキストを指定します。textのデフォルトは「SQL*Plus」です。textに複数の語を入力する場合、それらの語全体を引用符で囲む必要があります。textの最大長は、DBMS_APPLICATION_INFOパッケージによって制限されます。
登録名の書式は、nn@xfilenameです。nnは、スクリプトの深さレベルです。xは、スクリプト名を切り捨てる場合は「< 」、そうでない場合は空白です。filenameはスクリプト名で、DBMS_APPLICATION_INFOパッケージ・インタフェースで許可されている長さまで切り捨てられる場合があります。
例
APPINFOの値(デフォルトはOFF)を表示するには、次のように入力します。
SET APPINFO ON SHOW APPINFO
APPINFO is ON and set to "SQL*Plus"
デフォルト・テキストを変更するには、次のように入力します。
SET APPINFO 'This is SQL*Plus'
登録が行われたことを確認するには、次のように入力します。
VARIABLE MOD VARCHAR2(50) VARIABLE ACT VARCHAR2(40) EXECUTE DBMS_APPLICATION_INFO.READ_MODULE(:MOD, :ACT);
PL/SQL procedure successfully completed.
PRINT MOD
MOD
---------------------------------------------------
This is SQL*Plus
APPINFOをデフォルト設定に戻すには、次のように入力します。
SET APPINFO OFF
12.41.3 SET AUTO[COMMIT]{ON | OFF | IMM[EDIATE] | n}
SQLまたはPL/SQLコマンドの後、データベースに対する保留中の変更がOracle Databaseによってコミットされる時点を制御します。
ONを指定すると、Oracle DatabaseによってINSERT、UPDATE、DELETEまたはPL/SQLブロックがそれぞれ正常に実行された後で、データベースに対する保留中の変更がコミットされます。OFFを指定すると、自動コミットされないため、手動で(たとえば、SQLコマンドのCOMMITを使用して)変更をコミットする必要があります。IMMEDIATEを指定すると、ONと同じ機能が得られます。nを指定すると、Oracle Databaseによってn個のSQL INSERT、UPDATE、DELETEの各コマンドまたはPL/SQLブロックが正常に実行された後で、データベースに対する保留中の変更がコミットされます。nは、0(ゼロ)以上2,000,000,000未満である必要があります。文カウンタは、n個のINSERT、UPDATE、DELETEコマンドまたはPL/SQLブロック、コミット、ロールバックまたはSET AUTOCOMMITコマンドの完了後、0(ゼロ)にリセットされます。
SET AUTOCOMMITでは、コミットの動作はSQL*Plusの終了時には変更されません。コミットされていないデータは、デフォルトでコミットされます。
ノート:
この機能の場合は、実際に含まれているSQLコマンドの数に関係なく、1つのPL/SQLブロックが1つのトランザクションとみなされます。
12.41.4 SET AUTOP[RINT] {ON | OFF}
ONまたはOFFによって、SQL*Plusがバインド変数(正常に実行されたPL/SQLブロックで参照されているか、またはEXECUTEコマンドで使用されているもの)を自動的に表示するかどうかを制御します。
バインド変数の表示の詳細は、「PRINT」を参照してください。
12.41.5 SET AUTORECOVERY [ON | OFF]
ONを指定すると、リカバリ時に必要なアーカイブREDOログ・ファイルのデフォルトのファイル名を自動的に適用するためにRECOVERコマンドが設定されます。
予期できる名前で予期できる位置に必要なファイルが提供されるので、対話は必要ありません。使用されるファイル名は、初期化パラメータLOG_ARCHIVE_DESTおよびLOG_ARCHIVE_FORMATの値から導出されます。
OFFを指定すると、デフォルト・オプションとして、手動でファイル名を入力するか、または自動生成されたデフォルトのファイル名を指定するかを選択できます。データベース・リカバリの詳細は、「RECOVER 」を参照してください。
例
AUTOMATICにリカバリ・モードを設定するには、次のように入力します。
SET AUTORECOVERY ON RECOVER DATABASE
12.41.6 SET AUTOT[RACE] {ON | OFF | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
正常に実行されたSQL DML文(SELECT、INSERT、UPDATE、DELETEまたはMERGEなど)のレポートを表示します。
レポートには、実行統計および問合せ実行パスを含めることができます。
動的サンプリングが有効な場合、DMLに関するSQL*Plusのレポート出力が異なる場合があります。
OFFを指定すると、トレース・レポートは表示されません。ONを指定すると、トレース・レポートが表示されます。TRACEONLYを指定すると、トレース・レポートは表示されますが、問合せデータは、存在しても出力されません。EXPLAINを指定すると、実行計画が実行されて、問合せ実行パスが表示されます。STATISTICSを指定すると、SQL文統計が表示されます。EXPLAIN PLANの詳細は、「EXPLAIN PLAN」を参照してください。
明示オプションを指定しないで、ONまたはTRACEONLYを使用すると、デフォルトでEXPLAIN STATISTICSが使用されます。
TRACEONLYオプションは、大きい問合せデータを抑止する場合に有効です。STATISTICSを指定すると、SQL*Plusは、サーバーから問合せデータをフェッチしますが、データは表示しません。
AUTOTRACEレポートは、文が正常に完了した後で出力されます。
SQL*PlusがSTATISTICSレポートを作成すると、データベースへの2番目の接続が自動的に確立されます。STATISTICSオプションがOFFに設定されたか、またはSQL*Plusからログアウトした場合に、この接続はクローズされます。
AUTOTRACEレポートの書式は、接続されているサーバーのバージョンおよびサーバーの構成によって異なります。AUTOTRACE PLANの追加情報および表形式の出力は、Oracle Database 10gリリース1(10.1)以上に接続している場合にサポートされます。それより前のデータベースに接続する場合は、旧形式またはAUTOTRACEレポートが使用されます。
FIPSフラグ付けが使用可能な状態のときは、AUTOTRACEは使用できません。
AUTOTRACEの詳細は、文のトレースについてを参照してください。
12.41.8 SET CMDS[EP] {; | c | ON | OFF}
1行に入力された複数のSQL*Plusコマンドを区切るために使用する英数字以外の文字を、cに設定します。
ONまたはOFFは、1行に複数のコマンドを入力できるかどうかを制御します。ONを設定すると、自動的にコマンド・セパレータ文字がセミコロン(;)に設定されます。
例
TTITLEでタイトルを指定して、同一行にCOLUMNで列を書式設定するには、次のように入力します。
SET CMDSEP + TTITLE LEFT 'SALARIES' + COLUMN SALARY FORMAT $99,999 SELECT LAST_NAME, SALARY FROM EMP_DETAILS_VIEW WHERE JOB_ID = 'SH_CLERK';
SALARIES
LAST_NAME SALARY
------------------------- --------
Taylor $3,200
Fleaur $3,100
Sullivan $2,500
Geoni $2,800
Sarchand $4,200
Bull $4,100
Dellinger $3,400
Cabrio $3,000
Chung $3,800
Dilly $3,600
Gates $2,900
Perkins $2,500
Bell $4,000
Everett $3,900
McCain $3,200
Jones $2,800
SALARIES
LAST_NAME SALARY
------------------------- --------
Walsh $3,100
Feeney $3,000
OConnell $2,600
Grant $2,600
20 rows selected.
12.41.9 SET COLINVI[SIBLE] [ON | OFF]
ONを指定すると、DESCRIBEコマンドで非表示列の情報を表示できるようになります。
SET COLINVISIBLEを指定しても、非表示列を含む問合せ文に対して影響はありません。非表示列のデータを取得するには、問合せでその列を明示的に指定します。
例
非表示列の情報をDESCRIBEコマンドで表示するには、次のようにします。
非表示列を含む表を作成します。
create table test_invisible_cols (emp_id number, emp_info char(20), emp_acc_no number invisible);
Table created.
DESCRIBEコマンドを使用して表の列を表示します。
describe test_invisible_cols
Name Null? Type
----------------------------------------- -------- -----------------------
EMP_ID NUMBER
EMP_INFO CHAR(20)
デフォルトのSET COLINVISIBLE OFFでは、非表示列は結果に表示されません。SET COLINVISIBLEのデフォルト設定をONに変更します。
SET COLINVISIBLE ON
colinvisible ON
再度、DESCRIBEコマンドを使用して表の列を表示します。今度は非表示列が出力されます。
describe test_invisible_cols
Name Null? Type
----------------------------------------- -------- -----------------------
EMP_ID NUMBER
EMP_INFO CHAR(20)
EMP_ACC_NO(INVISIBLE) NUMBER
12.41.10 SET COLSEP { | テキスト}
列出力と列出力の間に出力される列セパレータ文字を設定します。
COLSEP変数に空白または句読記号が含まれている場合は、一重引用符でテキストを囲む必要があります。textのデフォルト値は単一の空白です。
複数行を含む行の場合、異なる行を開始する列の間には列セパレータは出力されません。列セパレータは、BREAK...SKIP nによって生成される空白行には表示されず、レコード・セパレータが列セパレータで上書きされることもありません。詳細は、SET RECSEP {WR[APPED] | EA[CH] | OFF}を参照してください。
例
列セパレータを「|」に設定するには、次のように入力します。
SET MARKUP HTML PREFORMAT ON SET COLSEP '|' SELECT LAST_NAME, JOB_ID, DEPARTMENT_ID FROM EMP_DETAILS_VIEW WHERE DEPARTMENT_ID = 20;
LAST_NAME |JOB_ID |DEPARTMENT_ID
-------------------------|----------|-------------
Hartstein |MK_MAN | 20
Fay |MK_REP | 20
12.41.14 SET DEF[INE] {& | c | ON | OFF}
ONまたはOFFによって、SQL*Plusがコマンドをスキャンして置換変数を検索し、その値に置換するかどうかを指定します。ONを設定すると、cの値を最近使用された文字ではなくデフォルトの「&」に戻します。OFFを設定すると、SCAN変数の設定がオーバーライドされます。
SCAN変数の詳細は、「SET SCAN {ON|OFF}(廃止)」を参照してください。
12.41.15 SET DESCRIBE [DEPTH {1 | n | ALL}] [LINENUM {ON | OFF}] [INDENT {ON | OFF}]
オブジェクトの定義を繰り返し表示する深さレベルを設定します。
DEPTH句の有効範囲は、1から50です。SET DESCRIBE DEPTH ALLを設定する場合、深さは最大レベルの50に設定します。1つのオブジェクトに複数のオブジェクト型が含まれている場合は、行番号および属性や列のインデントを表示することもできます。SET LINESIZEコマンドを使用して、表示されるデータ幅を制御します。
オブジェクトの詳細は、「DESCRIBE」を参照してください。
例
オブジェクト型ADDRESSを作成するには、次のように入力します。
CREATE TYPE ADDRESS AS OBJECT ( STREET VARCHAR2(20), CITY VARCHAR2(20) ); /
Type created
オブジェクト型ADDRESSのネストされたオブジェクトEMPADDRを含む表EMPLOYEEを作成するには、次のように入力します。
CREATE TABLE EMPLOYEE (LAST_NAME VARCHAR2(30), EMPADDR ADDRESS, JOB_ID VARCHAR2(20), SALARY NUMBER(7,2) ); /
Table created
深さレベル2まで表EMPLOYEEを表示して、行数も表示しながら出力をインデントするには、次のように入力します。
SET DESCRIBE DEPTH 2 LINENUM ON INDENT ON DESCRIBE employee
Name Null? Type
------------------------------- -------- --------------------------
1 LAST_NAME VARCHAR2(30)
2 EMPADDR ADDRESS
3 2 STREET VARCHAR2(20)
4 2 CITY VARCHAR2(20)
5 JOB_ID VARCHAR2(20)
6 SALARY NUMBER(7,2)
12.41.17 SET EDITF[ILE] file_name[.ext]
EDITコマンド用のデフォルトのファイル名を設定します。EDITコマンドの詳細は、「EDIT」を参照してください。EDITコマンド用のデフォルトのファイル名は、SQLバッファであるafiedt.bufです。
パスまたはファイル拡張子(あるいはその両方)を挿入できます。デフォルトの拡張子を変更する方法については、「SET SUF[FIX] {SQL | text}」を参照してください。デフォルトのファイル名およびファイル名の最大長は、オペレーティング・システムによって異なります。
12.41.19 SET ERRORL[OGGING] {ON | OFF} [TABLE [schema.]tablename] [TRUNCATE] [IDENTIFIER 識別子]
SQL*Plusエラー・ロギングをONまたはOFFに切り替えます。エラー・ロギングでは、SQL、PL/SQLおよびSQL*Plusのエラーと関連パラメータをエラー・ログ表に記録します。このログ表を問い合せて、問合せによって発生するエラーを確認できます。エラー・ロギングがONの場合は、問合せが対話型またはスクリプトのどちらで実行されるかに関係なく、エラーが記録されます。これは、長時間実行される問合せによって生成されるエラーの取得に特に有効で、SPOOLコマンドの使用によるすべての出力の取得、または実行中の監視を回避できます。
デフォルトで、エラーは各スキーマの表SPERRORLOGに書き込まれます。この表が存在しない場合は、自動的に作成されます。TABLE schema.tablenameオプションを使用して、他の表を使用するように指定することもできます。SPERRORLOG以外の表を使用する場合は、その表がすでに存在していて、アクセス可能である必要があります。「ユーザー定義エラー・ログ表の作成」を参照してください。
内部エラーが発生した場合は、それ自体をコールするエラー・ログによって発生する再帰エラーを回避するため、エラー・ロギングは自動的にOFFに設定されます。
エラー・ロギングは、デフォルトでOFFに設定されます。
ON
ORA、PLSおよびSP2エラーをデフォルト表のSPERRORLOGに書き込みます。
OFF
エラーを無効にします。
TABLE [schema.]tablename
デフォルトのSPERRORLOGのかわりにユーザー定義表を使用するように指定します。schema.を省略すると、現行のスキーマに表が作成されます。指定する表は存在している必要があり、それに対するアクセス権限が必要です。
指定した表が存在しないか、またはその表に対するアクセス権がない場合は、エラー・メッセージが表示されて、デフォルト表のSPERRORLOGが使用されます。
TRUNCATE
エラー・ログ表の既存の行すべてがクリアされて、現行セッションからのエラーの記録が始まります。
IDENTIFIER identifier
エラーを識別するためのユーザー定義文字列。特定のセッションから、または特定の問合せバージョンからエラーを識別するために使用できます。
ユーザー定義エラー・ログ表の作成
1つ以上のエラー・ログ表を作成して、デフォルトのかわりに使用できます。TABLE schema.tablenameオプションを使用してユーザー定義エラー・ログ表を指定する前に、この表を作成して、表に対するアクセス権限を確保する必要があります。エラー・ログ表には、次の列定義があります。
表12-4 SQL*Plusエラー・ログの列定義
列 | タイプ | 説明 |
---|---|---|
username |
VARCHAR(256) |
Oracleアカウント名。 |
timestamp |
TIMESTAMP |
エラー発生時間。 |
script |
VARCHAR(1024) |
発生元のスクリプトがある場合は、その名前。 |
identifier |
VARCHAR(256) |
ユーザー定義識別子文字列。 |
message |
CLOB |
ORA、PLAまたはSP2のエラー・メッセージ。フィードバック・メッセージは含まれていません。たとえば、「PL/SQLブロックが作成されました。」は記録されません。 |
statement |
CLOB |
エラーを発生させた文。 |
ユーザー定義エラー・ログ表の使用
ユーザー定義ログ表を使用するには、その表へのアクセス権限が必要であり、SET ERRORLOGGINGコマンドにTABLE schema.tablenameオプションを付けて発行して、(必要に応じて)エラー・ログ表とスキーマを識別する必要があります。
エラー・ログ表の問合せ
エラー・ログ表に記録されたレコードを表示するには、任意の表で表示する必要がある列を問い合せます。使用可能な列を表12-4に示しています。
例
デフォルトのエラー・ログ表を使用して、次の内容を含むスクリプトmyfile.sqlによる問合せエラーを記録する場合:
VARIABLE U REFCURSOR BEGIN OPEN :U FOR SELECT * FROM DEPT; END; / SHOW ERRORS PROCEDURE 'SSS' SET GARBAGE SELECT * FROM GARBAGE ;
次のように入力します。
SET ERRORLOGGING ON @myfile
これによって、次の出力が表示されます。
open :u for select * from dept;
*
ERROR at line 2:
ORA-6550: line 2, column 29:
PLS-00201: ORA-00942: table or view does not exist
ORA-6550: line 2, column 16:
PL/SQL: SQL Statement ignored
ERROR:
ORA-00907: missing right parenthesis
SP2-0158: unknown SET option "garbage"
garbage
*
ERROR at line 3:
ORA-00942: table or view does not exist
デフォルトのエラー・ログ表SPERRORLOGに書き込まれたエラー・ログを表示するには、次のように入力します。
SELECT TIMESTAMP, USERNAME, SCRIPT, IDENTIFIER, STATEMENT, MESSAGE FROM SPERRORLOG;
これによって、次の出力が表示されます。
TIMESTAMP | ユーザー名 | スクリプト | 識別子 | 文 | メッセージ |
---|---|---|---|---|---|
Mon May 08 21:30:03 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
ORA-06550: 「行2、列27:」 |
|
Mon May 08 21:30:05 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
PL/SQL: ORA-00942: 「表またはビューが存在しません。」 |
|
Mon May 08 21:30:05 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
ORA-06550: 「行2、列13:」 |
|
Mon May 08 21:30:05 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
PL/SQL: 「SQL文が無視されました。」 |
|
Mon May 08 21:30:06 2006 |
SYSTEM |
d:\myfile.sql |
show errors procedure "sss" |
ORA-00907: 「右カッコがありません。」 |
|
Mon May 08 21:30:09 2006 |
SYSTEM |
d:\myfile.sql |
set garbage |
SP2-0158: 「不明なSETオプションです "garbage"」 |
|
Mon May 08 21:30:10 2006 |
SYSTEM |
d:\myfile.sql |
garbage |
ORA-00942: 「表またはビューが存在しません。」 |
例2
ユーザー定義エラー・ログ表を使用して、次の内容を含むスクリプトmyfile.sqlによる問合せエラーを記録する場合:
VARIABLE U REFCURSOR BEGIN OPEN :U FOR SELECT * FROM DEPT; END; / SHOW ERRORS PROCEDURE 'SSS' SET GARBAGE SELECT * FROM GARBAGE ;
次のように入力します。
SET ERRORLOGGING ON @MYFILE
これによって、次の出力が表示されます。
open :u for select * from dept;
*
ERROR at line 2:
ORA-6550: line 2, column 29:
PLS-00201: ORA-00942: table or view does not exist
ORA-6550: line 2, column 16:
PL/SQL: SQL Statement ignored
ERROR:
ORA-00907: missing right parenthesis
SP2-0158: unknown SET option "garbage"
garbage
*
ERROR at line 3:
ORA-00942: table or view does not exist
デフォルトのエラー・ログ表SPERRORLOGに書き込まれたエラー・ログを表示するには、次のように入力します。
SELECT TIMESTAMP, USERNAME, SCRIPT, IDENTIFIER, STATEMENT, MESSAGE FROM SPERRORLOG;
これによって、次の出力が表示されます。
TIMESTAMP | ユーザー名 | スクリプト | 識別子 | 文 | メッセージ |
---|---|---|---|---|---|
Mon May 08 21:30:03 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
ORA-06550: 「行2、列27:」 |
|
Mon May 08 21:30:05 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
PL/SQL: ORA-00942: 「表またはビューが存在しません。」 |
|
Mon May 08 21:30:05 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
ORA-06550: 「行2、列13:」 |
|
Mon May 08 21:30:05 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
PL/SQL: 「SQL文が無視されました。」 |
|
Mon May 08 21:30:06 2006 |
SYSTEM |
d:\myfile.sql |
show errors procedure "sss" |
ORA-00907: 「右カッコがありません。」 |
|
Mon May 08 21:30:09 2006 |
SYSTEM |
d:\myfile.sql |
set garbage |
SP2-0158: 「不明なSETオプションです "garbage"」 |
|
Mon May 08 21:30:10 2006 |
SYSTEM |
d:\myfile.sql |
garbage |
ORA-00942: 「表またはビューが存在しません。」 |
例3
デフォルト以外のエラー・ログ表を使用するには:
-
使用するエラー・ログ表を作成します。
-
SET ERRORLOGGING ONコマンドのTABLEオプションで、使用する表を指定します。
エラー・ログ表の列定義は表12-4で定義されている必要があります。
Johnがエラー・ログ表john_sperrorlogを使用する場合を想定します。Johnは、次のSQL文を実行して新しいエラー・ログ表を作成します。
DROP TABLE john_sperrorlog; CREATE TABLE john_sperrorlog(username VARCHAR(256), timestamp TIMESTAMP, script VARCHAR(1024), identifier VARCHAR(256), message CLOB, statement CLOB);
ユーザー・コメントgiridhar123から前の例のコミットを削除しました(14Feb08)
次にJohnは、次のSETコマンドを発行して、新しく作成したエラー・ログ表を使用したエラー・ロギングを有効にします。
SET ERRORLOGGING ON TABLE john_sperrorlog
これで、Johnのエラー・ロギングはすべて、デフォルトのエラー・ログ表SPERRORLOGではなく、john_sperrorlogに記録されます。
エラー・ログ表へのアクセス権限は、任意のユーザー表へのアクセス権限と同様に処理されます。
12.41.20 SET ESC[APE] {\ | c | ON | OFF}
OFFを指定すると、エスケープ文字の定義が解除されます。ONを指定すると、エスケープ文字が使用可能になります。ONを指定すると、cの値がデフォルトの「\」に戻ります。
置換文字(SET DEFINEで指定された文字)の前にエスケープ文字を指定することによって、SQL*Plusにその置換文字を変数置換のための要求としてでなく、通常の文字として処理するように指示できます。
例
感嘆符(!)をエスケープ文字として定義し、次のように入力したとします。
SET ESCAPE ! ACCEPT v1 PROMPT 'Enter !&1:'
次のプロンプトが表示されます。
Enter &1:
エスケープ文字をデフォルト値の\(円記号)に戻すには、次のように入力します。
SET ESCAPE ON
12.41.21 SET ESCCHAR {@ | ? | % | $ | OFF}
SPOOL、START、@、RUNおよびEDITコマンドのファイル名で使用した場合に、エスケープして解釈しない文字を指定します。これらの特殊文字は、次のように変換されます。
-
ファイル名の@はOracle SIDに変換されます
-
?はUNIXでOracleホームに変換されます
-
%はWindowsでOracleホームに変換されます
-
$は特定のプラットフォームでOracleホームに変換されます
これらの文字をファイル名で使用しないでください。これらの文字を使用するレガシー・ファイルがある場合は、SET ESCCHARコマンドをGLoginファイルに含めてサイト全体に実装すると便利です。
エスケープしない場合、@、?、%および$の文字は解釈の際に重要となり、SPOOL、START、@、RUNおよびEDITコマンドでエラーの原因となります。
SET ESCCHARは、デフォルトでOFFに設定されます。
例
文字「$」をファイル名に含めた場合は、次のようにします。
SET ESCCHAR $ RUN MYFILE$
正常に動作します。
12.41.22 SET EXITC[OMMIT] {ON | OFF}
デフォルトのEXIT動作をCOMMITにするかROLLBACKにするかを指定します。
デフォルト設定はONです。つまり、作業はコミットするかどうかの意図にかかわらず、終了時にコミットされます。EXITCOMMIT OFFを設定すると、作業は終了時にロールバックされます。
表12-5に、SETコマンド(AUTOCOMMITとEXITCOMMIT)およびEXITコマンドの組合せに関連付けられた終了アクションを示します。
表12-5 終了動作: AUTOCOMMIT、EXITCOMMIT、EXIT
AUTOCOMMIT | EXITCOMMIT | EXIT | 終了動作 |
---|---|---|---|
ON |
ON |
- |
COMMIT |
ON |
OFF |
- |
COMMIT |
OFF |
ON |
- |
COMMIT |
OFF |
OFF |
- |
ROLLBACK |
ON |
ON |
COMMIT |
COMMIT |
ON |
ON |
ROLLBACK |
COMMIT |
ON |
OFF |
COMMIT |
COMMIT |
ON |
OFF |
ROLLBACK |
COMMIT |
OFF |
ON |
COMMIT |
COMMIT |
OFF |
ON |
ROLLBACK |
ROLLBACK |
OFF |
OFF |
COMMIT |
COMMIT |
OFF |
OFF |
ROLLBACK |
ROLLBACK |
12.41.23 SET FEED[BACK] {6 | n | ON | OFF | ONLY} [SQL_ID]
スクリプトがn個以上のレコードを選択した場合に、スクリプトから戻されるレコード数を表示します。
ONまたはOFFによって、この表示をオンまたはオフにできます。フィードバックをONに設定すると、nが1に設定されます。フィードバックを0に設定することは、OFFに設定するのと同じです。データが表示されている間、フィードバック・メッセージは表示されません。
また、SET FEEDBACK OFFによって、SQLまたはPL/SQL文が正常に実行された後に表示される確認メッセージ(「表が作成されました。」、「PL/SQLプロシージャが正常に完了しました。」など)を非表示にできます。
ONLYは、データを表示せずに問合せで選択された行数を戻します。
SQL_IDは、実行されたSQL文またはPL/SQL文のsql_idを返します。sql_idが事前定義済変数_SQL_IDに割り当てられます。この事前定義済変数を使用して、実行されたSQL文をデバッグできます。変数は、_USERおよび_DATEなど、他の事前定義済の変数のように使用できます。
SQL> SET FEEDBACK ON SQL_ID SQL> SELECT * FROM DUAL; D - X 1 row selected. SQL_ID: a5ks9fhw2v9s1 SQL> COLUMN sql_text FORMAT a50 SQL> SELECT sql_text FROM v$sql WHERE sql_id = '&_sql_id'; SQL_TEXT ----------------------------------------------------- SELECT * FROM DUAL 1 row selected. SQL_ID: cf9bgxbfytv5b
SQL_IDオプションが指定され、フィードバックがONになっている場合、フィードバック・メッセージとともにSQL IDが表示されます。フィードバックがOFFの場合、SQL IDのみが表示されます。
例
SET FEEDBACK ONLYを有効にするには、次のように入力します。
SQL> SET FEEDBACK ONLY SQL> SHOW FEEDBACK feedback ONLY SQL> SELECT * FROM EMP; 14 rows selected.
SET_FEEDBACKおよびSQL_IDを有効にするには、次のように入力します
SQL> SET FEEDBACK ON SQL_ID SQL> SELECT * FROM DEPT; DEPTNO DNAME LOC -------------- ------------------- --------------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 4 rows selected. SQL_ID: 3154rqzb8xudy SQL> CONNECT SYSTEM ENTER PASSWORD: Connected. SQL> COLUMN sql_text FORMAT a50 SQL> SELECT sql_text FROM v$sql WHERE sql_id = '&_sql_id'; SQL_TEXT ------------------------------------------------------------- SELECT * FROM DEPT 1 row selected. SQL_ID: 81a5n8q6g2vvr
12.41.24 SET FLAGGER {OFF | ENTRY | INTERMED[IATE] | FULL}
SQL文がANSI/ISO SQL92規格に準拠しているかどうかを調べます。
規格外の構造体が見つかると、Oracle Databaseサーバーは、その構造体にエラーのフラグを付け、違反のある構文を表示します。これは、SQL言語のALTER SESSION SET FLAGGERコマンドと同じです。
データベースに接続されていない場合でも、SET FLAGGERを実行できます。FIPSフラグ付けは、SET FLAGGER OFF(またはALTER SESSION SET FLAGGER = OFF)コマンドが成功するか、またはSQL*Plusを終了するまでは、SQL*Plusセッション全体にわたって有効な状態のままになります。
FIPSフラグ付けを使用可能にすると、CONNECT、DISCONNECTおよびALTER SESSION SET FLAGGERコマンドが成功した場合でも、SQL*Plusはこれらのコマンドに対してアラートを表示します。
12.41.26 SET HEA[DING] {ON | OFF}
ONを指定すると、列ヘッダーがレポートに出力されます。OFFを指定すると、列ヘッダーが出力されなくなります。
SET HEADING OFFコマンドは、表示される列幅に影響しません。そのコマンドは、列ヘッダーを出力しないようにするのみです。
例
レポート内で列ヘッダーを非表示にするには、次のように入力します。
SET HEADING OFF
次のようなSQL SELECTコマンドを実行したとします。
SELECT LAST_NAME, SALARY FROM EMP_DETAILS_VIEW WHERE JOB_ID = 'AC_MGR';
出力結果は次のようになります。
Higgins 12000
列ヘッダーの表示を戻すには、次のように入力します。
SET HEADING ON
12.41.28 SET HIST[ORY] {ON | OFF | n}
コマンドの履歴を有効または無効にします。有効にした場合、SQL*Plus文、SQL文およびPL/SQL文はコマンド履歴リストに格納されます。HISTORYコマンドを使用することで、SQL*Plus文、SQL文およびPL/SQL文をリコールできます。
例
コマンド履歴を有効にしてリストに200件のエントリを格納するには、次のように入力します。
SET HIST[ORY] 200
nの値を指定しない場合、デフォルトは100となります。
ノート:
PL/SQLブロックなどの複数行のエントリは、コマンド履歴リストでは1つのエントリと見なされます。コマンド履歴には最大100000個のコマンドを格納できます。すでに有効となっているコマンド履歴を有効にしようとした場合、古いコマンド履歴がクリアされます。12.41.29 SET INSTANCE [instance_path | LOCAL]
セッションのデフォルトのインスタンスを、指定したインスタンス・パスに変更します。
SET INSTANCEコマンドを使用して、データベースへは接続しません。デフォルト・インスタンスは、インスタンスが何も指定されていないときにコマンドに対して使用されます。SET INSTANCEを最初に使用する前の一部のコマンドは、デフォルト・インスタンスと通信します。
ご使用のオペレーティング・システムでデフォルト値のインスタンスをリセットするには、instance_pathを指定しないでSET INSTANCEを入力するか、またはSET INSTANCE LOCALを入力します。
インスタンスの変更は、いずれのインスタンスにも現在接続されていない場合にのみ可能です。つまり、まず現行のインスタンスから切断されていることを確認してからインスタンスを設定または変更し、新しい設定を有効にするにはインスタンスに再接続する必要があります。
このコマンドは、Oracle Netが実行されているときにのみ実行されます。指定するインスタンス・パスとして、一部の有効なOracle Net接続識別子を使用できます。ご使用のオペレーティング・システムでOracle Net接続識別子を指定する方法の詳細は、オペレーティング・システム固有のOracle Databaseのマニュアルを参照してください。インスタンス・パスの最大長は、64文字です。
例
デフォルト・インスタンスに「PROD1」を設定するには、次のように入力します。
DISCONNECT SET INSTANCE PROD1
インスタンスをローカルのデフォルトに戻すには、次のように入力します。
SET INSTANCE local
インスタンスを変更するには、接続しているインスタンスから切断する必要があります。
12.41.30 SET LIN[ESIZE] {80 | n | WINDOW}
SQL*Plusが新しい行を開始する前に、1行に表示する文字の合計数を設定します。
TTITLE、BTITLE、REPHEADERおよびREPFOOTERの場合の、中央揃えおよび右揃えのテキストの位置も、この値によって制御されます。行サイズの設定の変更は、DESCRIBEコマンドによる出力で、テキストの折返しに影響する場合があります。DESCRIBEコマンドで出力される列には、通常、行サイズの割合が割り当てられます。行サイズを増減することによって、表示上、テキストの折返しが意図しない位置で行われる場合があります。LINESIZEは、値1から最大値(システムによって異なります)の範囲内で定義できます。
WINDOWによって、画面の幅と高さに応じた書式設定された出力にあわせて行サイズとページサイズが調整されます。出力が画面の幅を超えている場合、出力は対応して折り返されます。
画面サイズがSET LINESIZE nコマンドを使用して手動で設定されている場合、後続の出力は新しい行サイズにあわせて表示されます。
ノート:
SET LINESIZE WINDOWコマンドは、スクリプトに無視され、出力は画面のサイズに応じては表示されません。
例
出力の行サイズを20に設定するには、次のように入力します
SQL> SET LINESIZE 20 SQL> SHOW LINESIZE linesize 20
画面を手動でサイズ変更した後に出力表示を動的に変更するには、次のように入力します
SQL> SET LINESIZE Window SQL> SHOW LINESIZE linesize 160 WINDOW
12.41.32 SET LOBPREFETCH {0 | n}
SQL*Plusがデータベースから一度にプリフェッチするLOBデータの量(バイト数)を設定します。
例
プリフェッチされるLOBデータの量を8000バイトに設定するには、次のように入力します。
SET LOBPREFETCH 8000
nの値を指定しない場合、デフォルトは0となります。つまり、LOBデータのプリフェッチはオフとなります。
ノート:
指定できる最大値は2147483648バイト(2 GB)です。oraaccess.xml
ファイル内の設定により、SQL*PlusにおけるSET LOBPREFETCHの設定をオーバーライドできます。oraaccess.xml
の詳細は、Oracle Call Interfaceプログラマーズ・ガイドを参照してください。
SQL*Plusがデータベースから一度にプリフェッチするLOBデータの量について現在の設定を表示するには、次のように入力します。
SHOW LOBPREF[ETCH]
12.41.34 SET LONG {80 | n}
BLOB、BFILE、CLOB、LONG、NCLOBおよびXMLType値を表示するため、およびLONG値をコピーするための最大幅をバイト単位で設定します。
SET LONGCHUNKSIZEコマンドの値に関係なく、LONG列の問合せには、SET LONGで指定されたデータの量を格納するための十分なローカル・メモリーが必要です。この要件は、LOBの問合せには適用されません。
LONG列を含む表は、作成しないことをお薦めします。LONG列は、下位互換性のためにのみサポートされています。かわりにLOB列(BLOB、BFILE、CLOB、NCLOB)を使用してください。LOB列は、LONG列より制限が少なく、現在でも機能が拡張されています。
nの最大値は2,000,000,000バイトです。SET LONGコマンドの実行に必要なメモリーがマシンで使用可能かどうかを、次のようにチェックすることが重要です。
SET LONG 2000000000
この例の場合は、マシンで使用可能なRAM(ランダム・アクセス・メモリー)が2GBを超えていることが必要です。
例
LONG値を表示およびコピーするためにフェッチする最大バイト数を500に設定するには、次のように入力します。
SET LONG 500
LONGデータは、画面上で折り返されます。SQL*Plusは、501バイト目から切捨てを行います。LONGのデフォルト値は80バイトです。
12.41.36 SET MARK[UP]
構文
SET MARK[UP] markup_option
markup_optionの構成は、次のとおりです。
-
csv_option
-
html_option
csv_optionの構文は、次のとおりです。
CSV {ON|OFF} [DELIMI[TER] character] [QUOTE {ON|OFF}]
html_optionの構文は、次のとおりです。
HTML {ON|OFF} [HEAD text] [BODY text] [TABLE text] [ENTMAP {ON|OFF}] [SPOOL {ON|OFF}] [PRE[FORMAT] {ON|OFF}]
csv_option
レポートをCSV形式で出力します。
有効にするには、動的レポート出力の値を変更するSET MARKUPコマンドを、問合せ出力を生成する文の前に発行する必要があります。問合せ出力を生成する最初の文によって、DELIMITERおよびQUOTEの設定を反映したCSVデータの出力がトリガーされます。
CSVは、生成される出力タイプをCSVに指定するSET MARKUPの必須引数です。CSV引数ONおよびOFFは、CSV出力を生成するかどうかを指定します(オプション)。デフォルトはOFFです。
CSV出力のONおよびOFFは、セッション中、必要に応じて切り替えることができます。
DELIMI[TER] character
DELIMI[TER] characterオプションにより、列セパレータ文字を指定できます。
QUOTE {ON|OFF}
QUOTE {ON|OFF}オプションにより、テキストに対する引用符の付加のオンとオフを切り替えることができます。デフォルトはOFFです。
QUOTE ONにすると、すべてのテキストに引用符が付加された状態でCSV出力が生成されます。テキストに埋め込まれた二重引用符(" ")はエスケープされます。
引用符が付加されたテキストのONおよびOFFは、セッション中、必要に応じて切り替えることができます。
SET MARKUP CSVが有効な場合にサポートされているコマンド
SET MARKUP CSVが有効な場合、次のCOLUMNコマンドは有効なままとなります。
-
COLUMN FORMAT
-
COLUMN HEADING
-
COLUMN NULL
SET MARKUP CSVが有効な場合にサポートされていないコマンド
SET MARKUP CSVが有効な場合、次のSQL*Plusコマンドは出力において有効となりません。
SET MARKUP CSVが有効な場合、次のSETコマンドは出力において有効となりません。
SET MARKUP CSVが有効な場合、次のCOLUMNコマンドは出力において有効となりません。
-
COLUMN ENTMAP
-
COLUMN FOLD_AFTER
-
COLUMN FOLD_BEFORE
-
COLUMN JUSTIFY
-
COLUMN NEWLINE
-
COLUMN NEW_VALUE
-
COLUMN NOPRINT
-
COLUMN OLD_VALUE
-
COLUMN WRAP
MARKUPオプションの状態を表示するには、SHOW MARKUPコマンドを使用します。
例
次の例は、SET MARKUP CSVが有効な場合の出力を示しています。
SQL> SET MARKUP CSV ON SQL> SELECT * FROM EMP; "EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO" 7369,"SMITH","CLERK",7902,"17-DEC-80",800,,20 7499,"ALLEN","SALESMAN",7698,"20-FEB-81",1600,300,30 7521,"WARD","SALESMAN",7698,"22-FEB-81",1250,500,30 7566,"JONES","MANAGER",7839,"02-APR-81",2975,,20 7654,"MARTIN","SALESMAN",7698,"28-SEP-81",1250,1400,30 7698,"BLAKE","MANAGER",7839,"01-MAY-81",2850,,30 7782,"CLARK","MANAGER",7839,"09-JUN-81",2450,,10 7788,"SCOTT","ANALYST",7566,"19-APR-87",3000,,20 7839,"KING","PRESIDENT",,"17-NOV-81",5000,,10 7844,"TURNER","SALESMAN",7698,"08-SEP-81",1500,0,30 7876,"ADAMS","CLERK",7788,"23-MAY-87",1100,,20 7900,"JAMES","CLERK",7698,"03-DEC-81",950,,30 7902,"FORD","ANALYST",7566,"03-DEC-81",3000,,20 7934,"MILLER","CLERK",7782,"23-JAN-82",1300,,10 14 rows selected.
次の例は、テキスト文字列に引用符を付加せずに、データベースの従業員表からすべてのレコードを抽出する方法を示しています。
SQL> SET MARKUP CSV ON QUOTE OFF SQL> SELECT * FROM EMP; EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO 7369,SMITH,CLERK,7902,17-DEC-80,800,,20 7499,ALLEN,SALESMAN,7698,20-FEB-81,1600,300,30 7521,WARD,SALESMAN,7698,22-FEB-81,1250,500,30 7566,JONES,MANAGER,7839,02-APR-81,2975,,20 7654,MARTIN,SALESMAN,7698,28-SEP-81,1250,1400,30 7698,BLAKE,MANAGER,7839,01-MAY-81,2850,,30 7782,CLARK,MANAGER,7839,09-JUN-81,2450,,10 7788,SCOTT,ANALYST,7566,19-APR-87,3000,,20 7839,KING,PRESIDENT,,17-NOV-81,5000,,10 7844,TURNER,SALESMAN,7698,08-SEP-81,1500,0,30 7876,ADAMS,CLERK,7788,23-MAY-87,1100,,20 7900,JAMES,CLERK,7698,03-DEC-81,950,,30 7902,FORD,ANALYST,7566,03-DEC-81,3000,,20 7934,MILLER,CLERK,7782,23-JAN-82,1300,,10 14 rows selected.
次の例は、パイプ( | )文字がデリミタとして指定された出力を示しています。
SQL> SET MARKUP CSV ON DELIMITER | SQL> SELECT * FROM EMP; EMPNO|ENAME|JOB|MGR|HIREDATE|SAL|COMM|DEPTNO 7369|SMITH|CLERK|7902|17-DEC-80|800||20 7499|ALLEN|SALESMAN|7698|20-FEB-81|1600|300|30 7521|WARD|SALESMAN|7698|22-FEB-81|1250|500|30 7566|JONES|MANAGER|7839|02-APR-81|2975||20 7654|MARTIN|SALESMAN|7698|28-SEP-81|1250|1400|30 7698|BLAKE|MANAGER|7839|01-MAY-81|2850||30 7782|CLARK|MANAGER|7839|09-JUN-81|2450||10 7788|SCOTT|ANALYST|7566|19-APR-87|3000||20 7839|KING|PRESIDENT||17-NOV-81|5000||10 7844|TURNER|SALESMAN|7698|08-SEP-81|1500|0|30 7876|ADAMS|CLERK|7788|23-MAY-87|1100||20 7900|JAMES|CLERK|7698|03-DEC-81|950||30 7902|FORD|ANALYST|7566|03-DEC-81|3000||20 7934|MILLER|CLERK|7782|23-JAN-82|1300||10 14 rows selected.
html_option
HTMLマークアップ・テキストを出力します。
有効にするには、動的レポート出力の値を変更するSET MARKUPコマンドを、問合せ出力を生成する文の前に指定する必要があります。問合せ出力を生成する最初の文によって、HEAD設定、TABLE設定などのSET MARKUPによって影響を受ける情報の出力がトリガーされます。後続のSET MARKUPコマンドは、すでにレポートに送信されている情報には影響を与えません。
SET MARKUPは、SQL*Plusの出力をHTML形式にエンコードすることを指定するのみです。スプール・ファイルの作成、ファイル名の指定およびファイルへのHTML出力の書込みを開始するには、SET MARKUP HTML ON SPOOL ONおよびSQL*PlusのSPOOLコマンドを使用する必要があります。SET MARKUPのオプションと動作は、SQLPLUS -MARKUPと同じです。
詳細は、「MARKUPオプション」を参照してください。使用例については、SQL*Plusからのレポートの生成を参照してください。
MARKUPオプションの状態を表示するには、SHOW MARKUPコマンドを使用します。
例
次に、SET MARKUP HTMLコマンドを使用し、HTMLマークアップ・テキストを指定したファイルにスプールするスクリプトを示します。
ノート:
SET MARKUPの例では、コマンドは、行継続文字「–」および空白を使用して読みやすいようにレイアウトされています。通常、コマンド・オプションは連結して入力されます。
任意のテキスト・エディタを使用して、レポート用のHTMLオプションおよび問合せの設定に必要なコマンドを入力します。
SET MARKUP HTML ON SPOOL ON HEAD "<TITLE>SQL*Plus Report</title> - <STYLE TYPE='TEXT/CSS'><!--BODY {background: ffffc6} --></STYLE>" SET ECHO OFF SPOOL employee.htm SELECT FIRST_NAME, LAST_NAME, SALARY FROM EMP_DETAILS_VIEW WHERE SALARY>12000; SPOOL OFF SET MARKUP HTML OFF SET ECHO ON
このスクリプトにはSQL*Plusコマンドが含まれるため、バッファから/(スラッシュ)を使用すると正常に実行されません。テキスト・エディタでスクリプトを保存し、STARTを使用して次のように実行します。
START employee.sql
HTMLスプール・ファイルemployee.htmの書込みと同様に、SET TERMOUTがONにデフォルト設定されているため、出力は画面にも表示されます。Webブラウザにスプール・ファイルemployee.htmを表示できます。次のように表示されるはずです。
12.41.39 SET NUMF[ORMAT] 形式
数値を表示するためのデフォルトの書式を設定します。数値書式の詳細は、「COLUMN」コマンドのFORMAT句を参照してください。formatに、数値書式を入力します。SET NUMWIDTHで指定されたデフォルトのフィールド幅と書式設定モデルを使用するには、次のように入力します。
SET NUMFORMAT ""
12.41.40 SET NUM[WIDTH] {10 | n}
数値を表示するためのデフォルトの幅を設定します。数値書式の詳細は、「COLUMN」コマンドのFORMAT句を参照してください。
COLUMN FORMAT設定は、SET NUMFORMAT設定より優先されます。SET NUMFORMAT設定は、SET NUMWIDTH設定より優先されます。
12.41.42 SET PAU[SE] {ON | OFF | テキスト}
レポートの実行中に端末のスクロール制御を実現します。SQL*Plusが一時停止するたびにテキストを表示する場合は、SET PAUSE textを指定した後で、SET PAUSE ONを指定します。
SET PAUSE ONは各PAGESIZEで指定した行数の各レポートの出力開始時に出力を一時停止します。以降の出力を表示するには、[Return]を押します。SET PAUSE textには、SQL*Plusが一時停止するたびに表示するテキストを指定します。テキストに複数の語を含める場合は、textを引用符で囲む必要があります。
端末固有のエスケープ・シーケンスをPAUSEコマンドの中に入れることができます。このようなシーケンスを使用すると、反転表示などの効果を持つメッセージを端末上に作成できます。
12.41.43 SET RECSEP {WR[APPED] | EA[CH] | OFF}
RECSEPには、SQL*Plusがどこでレコードを分離するかを指定します。
たとえば、RECSEPをWRAPPEDに設定すると、SQL*Plusは折り返された行の直後にのみレコード・セパレータを出力します。RECSEPをEACHに設定すると、SQL*Plusは各行の後にレコード・セパレータを出力します。RECSEPにOFFを設定すると、SQL*Plusはレコード・セパレータを出力しません。
12.41.45 SET ROWLIMIT {n | OFF}
問合せに対して表示する行数の制限を設定します。デフォルトでは、ROWLIMITはOFFになっています。
nには1 - 2,000,000,000の任意の数値を指定できます。入力された値がこの範囲内でない場合には、エラーが表示されます。
OFFを指定すると、出力のすべての行が表示されます。
SET ROWLIMITは、SET FEEDBACKコマンドで設定した値を無視します。
SET ROWLIMITコマンドは、多くの行数を返す問合せの場合に便利です。ユーザーは問合せを変更せずに表示する行数を制限できます。
SET ROWLIMITコマンドの目的は、問合せのパフォーマンスを向上させることではなく、表示する行を制限することです。データベースからフェッチされる行数は、SET ARRAYSIZE値によって決定されます。このため、サーバーはROWLIMITで設定された値を超える行を返す場合があります。制限を超えた行が返されると、問合せは終了し、サーバーからそれ以上データをフェッチしません。たとえば、表を問い合せるSQL文に100行が含まれているが、ROWLIMITは10に設定されており、ARRAYSIZEは15に設定されているとします。問合せが実行されると、15行が最初にデータベースからフェッチされます。返された行がROWLIMIT設定に到達しているため、これ以上フェッチせずに問合せは終了します。ただし、ROWLIMITが20に設定されている場合、ROWLIMIT設定に到達させるために次の15行をフェッチする2回目のラウンドトリップが必要となります。
例
表示される行数を2に設定するには、次のように入力します。
SQL> SET ROWLIMIT 2 SQL> SHOW ROWLIMIT rowlimit 2 SQL> SELECT * FROM DEPT; DEPTNO DNAME ------ ----------- 10 ACCOUNTING 20 RESEARCH 2 rows selected. (rowlimit reached)
例
デフォルトでは、FEEDBACKメッセージは10行が表示された後にのみ表示されますが、ROWLIMITが2に設定されている場合、FEEDBACKが10に設定されていても、2行のFEEDBACKメッセージが表示されます。
SQL> SET FEEDBACK 10 SQL> SET ROWLIMIT 2 SQL> SELECT * from EMP; 2 rows selected. (rowlimit reached)
12.41.46 SET ROWPREFETCH {1 | n}
SQL*Plusがデータベースから一度にプリフェッチする行数を設定します。
デフォルト値は1です。
例
プリフェッチされる行数を200に設定するには、次のように入力します。
SET ROWPREFETCH 200
nの値を指定しない場合、デフォルトは1行となります。つまり、行のプリフェッチはオフとなります。
ノート:
プリフェッチされた行に含まれるデータの量が、最大値2147483648バイト(2 GB)を超えないようにしてください。oraaccess.xml
ファイル内の<prefetch>の設定により、SQL*PlusにおけるSET ROWPREFETCHの設定をオーバーライドできます。oraaccess.xml
の詳細は、Oracle Call Interfaceプログラマーズ・ガイドを参照してください。
SQL*Plusがデータベースから一度にプリフェッチする行の数について現在の設定を表示するには、次のように入力します。
SHOW ROWPREF[ETCH]
12.41.47 SET SECUREDCOL {OFF | ON} [UNAUTH[ORIZED] テキスト] [UNK[NOWN] テキスト]
SQLPLUS出力で、セキュアな列値を、列を表示する権限のないユーザーおよびセキュリティが不明の列に対して表示する方法を設定します。デフォルト・テキストを選択するか、表示するテキストを指定できます。デフォルトはOFFです。
列レベルのセキュリティが有効で、SET SECUREDCOLがONに設定されている場合、セキュアな列または不明なセキュリティ・レベルの列に対するSQLPLUSからの出力は、カスタマイズしたテキストまたはデフォルトのインジケータで置き換えられます。これは、スカラー・データ型にのみ適用されます。複合オブジェクト・データ出力には影響ありません。
ONを指定すると、認可のないユーザーの列値のかわりに*****、セキュリティ・レベルが不明な列値のかわりに?????が表示されます。定義されている列長または現在のCOLUMNコマンドで定義した列長に合せて*および?が埋め込まれます。
OFFを指定すると、認可のないユーザーの列値およびセキュリティ・レベルが不明な列値のかわりにNULL値が表示されます。
UNAUTH[ORIZED]テキストでは、認可のないユーザーに対してセキュアな列に表示するテキストを指定できます。このテキストは、デフォルトの*****のかわりに表示されます。
列長以内または30文字以内の任意の英数字テキストを指定できます。これより長いテキストは切り捨てられます。空白を含むテキストは、引用符で囲む必要があります。
UNK[NOWN]テキストでは、セキュリティ・レベルが不明の列に表示するテキストを指定できます。このテキストは、デフォルトの??????のかわりに表示されます。
列長以内または30文字以内の任意の英数字テキストを指定できます。これより長いテキストは切り捨てられます。空白を含むテキストは、引用符で囲む必要があります。
例
SET SECUREDCOL ON SELECT empno, ename, sal FROM emp ORDER BY deptno;
EMPNO ENAME DEPTNO SAL
7539 KING 10 ********
7369 SMITH 20 800
7566 JONES 20 2975
7788 SCOTT 20 3000
7521 WARD 30 ********
7499 ALLEN 30 ********
SET SECUREDCOL ON UNAUTH notallow SELECT empno, ename, sal FROM emp ORDER BY deptno;
EMPNO ENAME DEPTNO SAL
7539 KING 10 notallow
7369 SMITH 20 800
7566 JONES 20 2975
7788 SCOTT 20 3000
7521 WARD 30 notallow
7499 ALLEN 30 notallow
12.41.48 SET SERVEROUT[PUT] {ON | OFF} [SIZE {n | UNL[IMITED]}] [FOR[MAT] {WRA[PPED] | WOR[D_WRAPPED] | TRU[NCATED]}]
ストアド・プロシージャの出力(DBMS_OUTPUT.PUT_LINE)またはPL/SQLブロックの出力を、SQL*Plusで表示するかどうかを制御します。DBMS_OUTPUTによる行の長さの制限は32767バイトです。
OFFを指定すると、DBMS_OUTPUT.PUT_LINEの出力が非表示になります。ONを指定すると、出力が表示されます。
ONを指定すると、以前のSET SERVEROUTPUT ON SIZE n FORMAT fのSIZEおよびFORMATが使用されるか、または現在の接続で以前にSET SERVEROUTPUTコマンドが発行されていない場合はデフォルト値が使用されます。
SIZEには、Oracle Databaseサーバーの内部バッファに格納できる出力のバイト数を設定します。デフォルトはUNLIMITEDです。nは2000以上または1,000,000以下にしてください。
SERVEROUTPUTが設定されている場合、リソースは事前に割り当てられません。パフォーマンスは低下しないため、物理メモリーを保存する場合以外は、UNLIMITEDを使用します。
各サーバー出力行は新しい出力行から開始されます。
WRAPPEDを使用可能にすると、SQL*PlusはSET LINESIZEに指定された行サイズに従ってサーバー出力を折り返し、必要に応じて新しい行を開始します。
WORD_WRAPPEDを使用可能にすると、サーバー出力の各行がSET LINESIZEで指定した行サイズに従って折り返されます。行はワード境界で改行されます。SQL*Plusは、各行を左揃えし、先行空白をすべてスキップします。
TRUNCATEDを使用可能にすると、サーバー出力の各行がSET LINESIZEで指定した行サイズになるように切り捨てられます。
UTL_FILEユーティリティおよび関連ユーティリティの使用方法の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。
DBMS_OUTPUT.PUT_LINEの詳細は、「Oracle XAでのアプリケーションの開発」を参照してください。
例
DBMS_OUTPUT.PUT_LINEを使用してPL/SQLブロック内のテキストを表示するには、次のように入力します。
SET SERVEROUTPUT ON
次に、SET SERVEROUTPUT ONを使用して匿名プロシージャを実行した結果を示します。
BEGIN DBMS_OUTPUT.PUT_LINE('Task is complete'); END; /
Task is complete.
PL/SQL procedure successfully completed.
次に、SET SERVEROUTPUT ONを使用してトリガーを作成した結果を示します。
CREATE TABLE SERVER_TAB (Letter CHAR); CREATE TRIGGER SERVER_TRIG BEFORE INSERT OR UPDATE - OR DELETE ON SERVER_TAB BEGIN DBMS_OUTPUT.PUT_LINE('Task is complete.'); END; /
Trigger Created.
INSERT INTO SERVER_TAB VALUES ('M'); DROP TABLE SERVER_TAB; /* Remove SERVER_TAB from database */
Task is complete.
1 row created.
出力をWORD_WRAPPEDに設定するには、次のように入力します。
SET SERVEROUTPUT ON FORMAT WORD_WRAPPED SET LINESIZE 20 BEGIN DBMS_OUTPUT.PUT_LINE('If there is nothing left to do'); DBMS_OUTPUT.PUT_LINE('shall we continue with plan B?'); END; /
If there is nothing
left to do
shall we continue
with plan B?
出力をTRUNCATEDに設定するには、次のように入力します。
SET SERVEROUTPUT ON FORMAT TRUNCATED SET LINESIZE 20 BEGIN DBMS_OUTPUT.PUT_LINE('If there is nothing left to do'); DBMS_OUTPUT.PUT_LINE('shall we continue with plan B?'); END; /
If there is nothing
shall we continue wi
12.41.49 SET SHIFT[INOUT] {VIS[IBLE] | INV[ISIBLE]}
シフト文字を表示する端末に適した位置合せを実現します。SET SHIFTINOUTコマンドは、データとともにシフト文字を表示する端末(たとえば、IBM 3270端末)の場合に使用すると有効です。このコマンドを使用できるのは、シフト文字を検出する文字セット(たとえば、JA16DBCS)のときのみです。
端末でシフト文字を可視文字(たとえば、空白またはコロン)として表示するには、VISIBLEを使用します。INVISIBLEは、これと反対で、シフト文字が表示されません。
例
これらをサポートする端末にシフト文字が表示されるようにするには、次のように入力します。
SET SHIFTINOUT VISIBLE SELECT LAST_NAME, JOB_ID FROM EMP_DETAILS_VIEW WHERE SALARY > 12000;
LAST_NAME JOB_ID
---------- ----------
:JJOO: :AABBCC:
:AA:abc :DDEE:e
「:」は、マルチバイト文字を表すシフト大文字です。
小文字は、シングルバイト・キャラクタを示します。
12.41.51 SET SQLBL[ANKLINES] {ON | OFF}
SQL*PlusがSQLコマンドまたはスクリプト内に空白行を入れるかどうかを制御します。ONを指定すると、空白行および新しい行はSQLコマンドまたはスクリプトの一部とみなされます。OFF(デフォルト)を指定すると、SQLコマンドまたはスクリプト内に空白行または新しい行を許可しません。
SQLコマンドのエントリをSQLコマンドを実行しないで停止するには、BLOCKTERMINATORを入力します。SQLコマンドのエントリを停止して、SQL文を実行するには、SQLTERMINATORを入力します。
例
SQL文での空白行を許可するには、次のように入力します。
SET SQLBLANKLINES ON REM Using the SQLTERMINATOR (default is ";") REM Could have used the BLOCKTERMINATOR (default is ".") SELECT * FROM DUAL ;
出力結果は、次のようになります。
D
-
X
12.41.55 SET SQLPLUSCOMPAT[IBILITY] {x.y[.z]}
動作をx.y[.z]で指定されたリリースまたはバージョンの動作に設定します。
xはバージョン番号を、yはリリース番号を、zはアップデート番号を示します。たとえば、8.1.7、9.0.1または10.2です。SQLPLUSCOMPATIBILITYによって影響を受ける機能は、後述のSQL*Plus互換性マトリックスに示します。また、コマンドラインからSQL*Plusを起動する際に、SQLPLUSコマンドの-C[OMPATIBILITY]引数を使用して、SQLPLUSCOMPATIBILITYの値を設定できます。
SQLPLUSCOMPATIBILITYのデフォルト設定は、SQL*Plusクライアントの値です。
SET SQLPLUSCOMPATIBILITY 12.2をスクリプトに追加して、SQL*Plusの将来のバージョンとの互換性を高めることをお薦めします。
12.41.55.1 SQL*Plus互換性マトリックス
SQL*Plus互換性マトリックスに、各SQL*Plusの互換性の設定によって影響を受ける動作を示します。SQL*Plusの互換性モードは、3つの方法で設定できます。
-
SET SQLPLUSCOMPATIBILITYコマンドを、サイトまたはユーザーのプロファイル内に含めることができます。インストール時には、glogin.sqlにSET SQLPLUSCOMPATIBILITY設定はありません。したがって、デフォルトの互換性は12.2です。
-
起動時に、SQLPLUS -C[OMPATIBILITY] {x.y[.z]}コマンド引数を使用して、そのセッションの互換性モードを設定できます。
-
セッション中に、SET SQLPLUSCOMPATIBILITY {x.y[.z]}コマンドを使用して、セッションに必要なSQL*Plusの動作を設定できます。
次の表に、動作が変更されるSQL*Plusのリリース、およびそのように動作させるためのSQLPLUSCOMPATIBILITYの最小値を示します。たとえば、VARIABLEコマンドを以前のように動作させるには、9.0.1より前のバージョンのSQL*Plusを使用するか、SQLPLUSCOMPATIBILITYに9.0.1より小さい値を使用する必要があります。SQLPLUSCOMPATIBILITYに設定できる最も低い値は7.3.4です。
表12-6 互換性マトリックス
値 | 結果 | 使用可能なバージョン |
---|---|---|
>=10.1 |
SHOW ERRORSは、Oracle Database 10gでのみ使用可能な新しい列を使用して、PL/SQLエラー・メッセージをソートします。 |
10.1 |
>=10.1 |
SPOOLオプションCREATE、REPLACEおよびSAVEが追加されました。これらのオプションは、一部のプラットフォームでファイル名の解析に影響する場合があります。 |
10.1 |
>=10.1 |
SET SQLPROMPT |
10.1 |
>=10.1 |
空白文字は、引用符で囲むとWindowsファイル名に使用できます。その他の特殊句読記号には、現在Windowsでは使用できないものもあります。 |
10.1 |
>=10.1 |
10.1 |
|
<10.1 |
/*コメントをエコー表示する場合は廃止されたDOC>プロンプトを使用します。 |
10.1 |
>= 9.2 |
FOLD_AFTERで定義される幅の広い列が、新しい行の先頭に表示されます。その他の場合は、前の行の終わりに想定された幅よりも小さい幅で不適切に挿入されます。 |
9.2. |
>= 9.0 |
SQL文のスラッシュ(/)の前の空白は無視され、スラッシュはSQL文の実行とみなされます。その他の場合は、スラッシュはSQL文の一部(除算記号など)として扱われます。 |
9.0.1.4. |
>= 9.0 |
NCHARおよびNVARCHAR2型に指定する長さは文字です。その他の場合は、長さは文字セットに応じてバイトまたは文字を表します。 |
9.0.1 |
12.41.57 SET SQLP[ROMPT] {SQL> | テキスト}
SQL*Plusコマンド・プロンプトを設定します。SET SQLPROMPTによって変数が動的に置換されます。これによって、実行時の変数(現在の接続識別子など)を挿入できます。SQLPROMPTで使用される置換変数の前に「&」を付ける必要はありません。他の置換変数と同様に使用およびアクセスできます。デフォルトのプロンプト「SQL>」に対しては、変数の置換は試行されません。
変数の置換は、SQLPROMPTにSETを指定するたびに行われます。SQLPROMPTがglogin.sqlに含まれている場合、SQLPROMPTの置換変数はログインまたは接続するたびに更新されます。
例
接続識別子を表示するSQL*Plusプロンプトを変更するには、次のように入力します。
SET SQLPROMPT "_CONNECT_IDENTIFIER > "
現行のユーザーを表示するSQL*Plusコマンド・プロンプトを設定するには、次のように入力します。
SET SQLPROMPT "_USER > "
SQL*Plusプロンプトを変更して現在の日付、現行のユーザーおよびユーザーの権限レベルを表示するには、次のように入力します。
SET SQLPROMPT "_DATE _USER _PRIVILEGE> "
SQL*Plusプロンプトを変更して定義済の変数を表示するには、次のように入力します。
DEFINE mycon = Prod1 SET SQLPROMPT "mycon> "
Prod1>
ネストした引用符内のテキストは、置換用には解析されません。SQL*Plusプロンプトに、ユーザー名、「@」および接続識別子をこの順序で表示するには、次のように入力します。
SET SQLPROMPT "_USER'@'_CONNECT_IDENTIFIER > "
12.41.59 SET STATEMENTC[ACHE] {0 | n}
文キャッシュ・サイズを設定します。キャッシュの値を指定すると、繰り返される文のキャッシュが可能になります。したがって、これらの文は再度解析する必要がないため、パフォーマンスが向上します。
例
文キャッシュ・サイズを15に設定するには、次のように入力します。
SET STATEMENTCACHE 15
nの値を指定しない場合、デフォルトは0となります。つまり、文キャッシュはオフとなります。
文キャッシュ・サイズには、0から32767の範囲の値を指定できます。
ノート:
Oracle Database初期化ファイルinit.oraのオープン・カーソル・パラメータに指定された値未満のキャッシュ・サイズを指定します。値0を指定すると、文キャッシュがオフになります。oraaccess.xml
ファイル内の<statement_cache>の設定により、SQL*PlusにおけるSET STATEMENTCACHEの設定をオーバーライドできます。oraaccess.xml
の詳細は、Oracle Call Interfaceプログラマーズ・ガイドを参照してください。
文キャッシュ・サイズの現在の設定を表示するには、次のように入力します。
SHOW STATEMENTC[ACHE]
12.41.63 SET TI[ME] {ON | OFF}
現在の時刻表示を制御します。ONを指定すると、各コマンド・プロンプトの前に現在の時刻が表示されます。OFFを指定すると、時刻が非表示になります。
12.41.64 SET TIMI[NG] {ON | OFF}
ONを指定すると、それぞれのSQLコマンドまたはPL/SQLブロックが実行されるたびに、そのタイミング統計が表示されます。OFFを指定すると、各コマンドのタイミング統計が表示されません。
複数のコマンドのタイミング情報については、「TIMING」を参照してください。
例
タイミング統計の書式は、オペレーティング・システムによって異なります。LinuxおよびWindowsでは、タイミング統計は24時間形式で、時間、分、秒および100分の1秒を表示します。
SET SUFFIX TXT
次のように入力したとします。
GET EXAMPLE
SQL*Plusは次のような出力を表示します。
GET EXAMPLE
12.41.71 SET XQUERY BASEURI {テキスト}
ファンクション内の相対URIを解決するために使用されるベースURIを指定します。これによって、XQueryによりアクセスされるファイルの接頭辞を変更できます。
BASEURIの設定を解除するには、次のように空の文字列を設定します。
SET XQUERY BASEURI ''
値はXQUERYコマンドの発行時にのみ確認されるため、注意して有効な値を入力してください。
例
SET XQUERY BASEURI '/public/scott' XQUERY for $i in doc("foo.xml") return $i /
これは、次の操作に相当します。
XQuery declare base-uri "/public/hr"; for $i in doc("foo.xml") return $i
12.41.72 SET XQUERY ORDERING {UNORDERED | ORDERED | DEFAULT}
XQueryの出力の順序付けを設定します。次の3つの値があります。
UNORDERED: データベースから取得された順序で結果が格納されることを指定します。
ORDERED: XQueryで定義された順序で結果が格納されることを指定します。
DEFAULT: データベースのデフォルトを指定します。Oracle Database 10gでは、デフォルトはUNORDEREDです。
SET XQUERY ORDERINGが設定されていない場合、デフォルトはDEFAULT(UNORDERED)です。
例
SET XQUERY ORDERING ORDERED XQUERY for $i in doc("foo.xml") return $i /
これは、次の操作に相当します。
XQuery declare ordering ordered; for $i in doc("foo.xml") return $i /
12.41.73 SET XQUERY NODE {BYVALUE | BYREFERENCE | DEFAULT}
ノードID保存モードを設定します。保存モードは、新規ノードを作成するすべての式(要素コンストラクタなど)またはノードを含む項目あるいは順序を戻すすべての式に適用されます。次の3つの値があります。
BYVALUE: ノードIDを保存する必要がないことを指定します。これは、作成などのノード操作または式の結果として戻されたノード操作がディープ・コピーされ、元のツリーでのコンテキストが失われることを意味します。このノード上でのノードID、親軸、兄弟軸または順序付けをテストする後続の操作は定義されません。
BYREFERENCE: ノードIDを保存する必要があることを指定します。このノード上での後続の操作で、ノードのコンテキストおよび定義が保存されます。
DEFAULT: データベースのデフォルトを指定します。Oracle Database 10gでは、デフォルトはBYVALUEです。
SET XQUERY NODEが設定されていない場合、デフォルトはDEFAULT(BYVALUE)です。
例
SET XQUERY NODE BYREFERENCE XQUERY for $i in doc("foo.xml") return $i /
これは、次の操作に相当します。
XQuery declare node byreference; for $i in doc("foo.xml") return $i /
12.41.74 SET XQUERY CONTEXT {テキスト}
XQueryコンテキスト項目の式を指定します。コンテキスト項目の式によって、コンテキスト項目に対して評価が行われます。コンテキスト項目は、ノード(式fn:doc("bib.xml")//book[fn:count(./author)>1]を指定)または原子価(式(1 to 100)[. mod 5 eq 0]を指定)のいずれかです。
XQUERY CONTEXTの設定を解除するには、次のように空の文字列を設定します。
SET XQUERY CONTEXT ''
値はXQUERYコマンドの発行時にのみ確認されるため、注意して有効な値を入力してください。
例
SET XQUERY CONTEXT 'doc("foo.xml")' XQUERY for $i in /a return $i /
これは、次の操作に相当します。
XQuery for $i in /a return $i passing XMLQuery("doc('foo.xml')") /