ITPub博客

首页 > 数据库 > Oracle > Oracle9i SET用法简介1

Oracle9i SET用法简介1

原创 Oracle 作者:zfnccn 时间:2009-05-28 22:03:51 0 删除 编辑

Oracle9i SET用法简介1

设置一个系统变量来改变你当前会话的SQL*Plus环境设置,比如:

  • 数据的显示宽度
  • 自定义的HTML格式
  • 启用或者禁用列标题的打印
  • 每页行长度

你也可以在iSQL*Plus中使用系统变量屏幕来设置系统变量。

SET 系统变量

系统变量和值都会显示在SET命令中。

用法

SQL*Plus维护系统变量(也称之为SET命令变量)来使你对一个SQL*Plus会话建立一个特定的环境。你可以使用SET命令改变这些系统变量,并使用SHOW命令列出它们的值。

SET ROLESET TRANSACTIONSQL命令(详情参考Oracle9i SQL Reference)。当后面不接TRANSACTIONROLE关键字时,SET默认是一个SQL*Plus命令。

SET APPI[NFO]{ON|OFF|text}

通过DBMS_APPLICATION_INFO包设置脚本的自动注册。它使得DBA能监控每个脚本的性能和资源使用情况。注册的名字显示在V$SESSIONV$SQLAREA视图中的MODULE字段。你可以使用DBMS_APPLICATION_INFO.READ_MODULE过程来获取注册的名字。

ON注册被@,@@START命令调用的脚本。OFF禁用脚本注册。替代的,text的当前值被注册。当没有脚本在运行或者当APPINFO设为OFF(这是默认设置)时,Text指定注册text。对于text,默认是“SQL*Plus”。如果你在text中输入多个字,你必须使用引号把它们括起来。Text的最大长度受DBMS_APPLICATION_INFO包的限制。

注册的名字有nn@xfilename的格式,其中nn是脚本的深度水平;当脚本名被截断时,x’<’,否则它是空的;filename是脚本名,可能会被截断成DBMS_APPLICATION_INFO包接口所允许的长度。


注意

为了使用这个特征,你必须可以访问DBMS_APPLICATION_INFO包。以SYS用户运行DBMSUTIL.SQL(这个名字可能根据你的操作系统不同而不同)来创建DBMS_APPLICATION_INFO包。DBMSUTIL.SQLOracle9i数据库服务器产品的一部分。


更多关于DBMS_APPLICATION_INFO包的信息,参考Oracle9i Database Performance Tuning Guide and Reference手册。

举例:

由于它的默认是SET OFF,为了显示APPINFO的设置,输入

SET APPINFO ON

SHOW APPINFO

APPINFO值为ON,并被设置给了”SQL*Plus”

为了改变默认的text值,输入

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 APPI OFF

SET ARRAY[SIZE] {15|n}

设置SQL*Plus一次从数据库里获取的行数--称之为一个batch。取值范围从15000。取大值会增加获取多行的查询和子查询的效率,但是需要更多的内存。值大于100之后,性能变化不大。ARRAYSIZESQL*Plus操作的结果没有影响,出了增加效率。

SET AUTO[COMMIT]{ON|OFF|IMM[EDIATE]|n}

控制Oracle什么时候提交对数据库的挂起的改变。ON表示在数据库成功执行每一个INSERTUPDATEDELETE命令或者PL/SQL块之后提交对数据库的挂起的改变。OFF禁止自动提交,因而你必须手动提交改变(例如,使用SQL命令COMMIT)。IMMEDAITE方式的功能和ON选项一样。n表示在数据库成功执行nINSERTUPDATEDELETE命令或者PL/SQL块之后提交对数据库的挂起的改变。n必须大于0小于2,000,000,000。在成功执行nINSERTUPDATEDELETE命令或者PL/SQL块、commitrollbackSET AUTOCOMMIT命令之后,语句的计数器会重置为0


注意

对于这个特征,一个PL/SQL块被当做一个事物,不管包含多少个实际的SQL命令个数。


SET AUTOP[RINT] {ON|OFF}

设置绑定变量的自动打印。ONOFF控制SQL*Plus是否自动显示绑定变量(参考EXECUTE命令执行PL/SQL块)。更多关于现实绑定变量的信息,参考本章的PRINT命令。

SET AUTORECOVERY [ON|OFF]

ON表示在恢复期间, RECOVER命令自动应用所需的默认归档日志文件名。当AUTORECOVERY设置为ON时,不需要交互,需要提供的文件以特定的文件名存在于特定的目录。当AUTORECOVERY0N时所用用的文件名是由初始化参数LOG_ARCHIVE_DEST and LOG_ARCHIVE_FORMAT的值决定的。

iSQL*Plus中,你必须设置使用RECOVERY命令将AUTORECOVERY设置为ON。试图使用AUTORECOVERY OFF时将会报错:

SP2-0872 iSQL*Plus中必须使用SET AUTORECOVERY ON

OFF为默认值,要求你手工输入文件名,或者接受给定的默认文件名。关于数据库恢复的更多信息参考本章的RECOVER命令。

举例

为了设置恢复模式为AUTOMATIC,输入

SET AUTORECOVERY ON

RECOVER DATABASE

SET AUTOT[RACE] {ON|OFF|TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]

显示有关SQL DML语句(SELECTINSERTUPDATEDETETE)成功执行的报告。这个报告可能包含执行统计和查询执行路径。

OFF不会显示跟踪报告。ON显示跟踪报告。TRACEONLY显示跟踪报告,但即便要,也不打印查询数据。EXPLAIN通过执行一个EXPLAIN PLAN显示查询执行路径。STATISTICS显示SQL语句的统计信息。更多EXPLIAN PLAN信息参考Oracle9i SQL Reference手册。

使用ONTRACEONLY不带显式选项,默认为EXPLAN STATISTICS

TRACEONLY选项对于禁止大查询的查询数据可能是有用的。如果STATISTICS被指定,SQL*Plus仍然会从服务器获得查询数据,只不过这些数据不会被显示。

在一个语句成功完成后,AUTOTRACE报告会被打印。

Oracle9i Database Performance Tuning Guide and Reference手册有关于执行计划和统计信息的文档。

SQL*Plus生成一个STATISTICS报告时,又一个数据库连接会自动生成。当STATISTICS选项被设置成OFF或者你退出SQL*Plus时,这个连接关闭。

你的AUTOTRACE报告的格式会根据你连接和配置的服务器的版本不同而不同。

FIPS标志启用时,AUTOTRACE不可用。

更多AUTOTRACE信息参考"Tracing Statements"

SET BLO[CKTERMINATOR] {.|c|ON|OFF}

设置用来结束PL/SQL块的字符为c。它不能是一个包含文字与数字的字符,也不能是空白。为了执行这个块,你必须使用RUN或者/(斜线)命令。

OFF意味着SQL*Plus认为没有PL/SQL块结束符号。ON改变c的值回默认的句号(.),而不是最近使用的符号。

SET CMDS[EP] {;|c|ON|OFF}

将用来分割一行内输入的多个SQL*Plus命令的非字符与数字的字符设置成cONOFF控制你在一行内是否可以输入多个命令。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.

SET COLSEP {_|text}

iSQL*Plus中,SET COLSEP决定了列的分隔符,这些分隔符作为标志显示在输出列的中间。HTML表输出是默认。为了生成预定格式的输出,你必须使用SET MARKUP HTML PREFORMAT ON命令设置PREFORMAT ON

设置text显示在被选的列之间。如果COLSEP变量包含多个空格或者标点符号,你必须用单引号括起来。Text的默认值是一个字符。

在多行的记录中,列分隔符不会显示在那些开始在不同的行的列之间。通过使用BREAK…SKIP n,列分隔符不会显示在空行,并且不会覆盖记录分隔符。更多信息参考SET RECSEP章节。

举例

为了将列分隔符设置成"|",输入

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

SET COM[PATIBILITY]{V7|V8|NATIVE}

指定使用的Oracle SQL语法的版本。对于Oracle7,设置COMPATIBILITYV7Oracle8V8,以此类推。COMPATIBILITY总是默认为NATIVECOMPATIBILITY应该正确设置为与你所连的数据库SQL语法版本一致,否则你可能不能运行任何SQL命令。

举例

为了运行一个脚本,用Oracle7 SQL语法生成的SALARY.SQL,输入

SET COMPATIBILITY V7

START SALARY

在运行这个文件后,重新设COMPATIBILITYNATIVE以运行Oracle9i所生成的脚本:

SET COMPATIBILITY NATIVE

你也可以在脚本的开头增加SET COMPATIBILITY V7命令,在文件的结尾重设COMPATIBILITYNATIVE

SET CON[CAT] {.|c|ON|OFF}

SQL*Plus将解释下一个字符作为变量名的一部分时,设置用来终止一个替换变量引用的字符。当你接通CONNCAT时,SQL*Plus重设CONCAT值。

SET COPYC[OMMIT] {0|n}

COPY命令提交改变到数据库后,控制批量处理的数量。COPY提交行到目的数据库,每次它复制n行批量处理。取值范围为05000.你可以设置一个批量的值为ARRAYSIZE变量。如果你设置COPYCOMMIT0COPY仅仅在复制操作结束时执行提交。

SET COPYTYPECHECK {ON|OFF}

当使用COPY命令插入或追加到表时,设置禁止数据类型比较。这是为了便于复制到DB2,它要求CHAR型被复制成一个DB2 DATE型。

SET DEF[INE] {&|c|ON|OFF}

将作为前缀替换变量的字符设置为cONOFF控制是否SQL*Plus将会扫描替换变量的命令,并用它们的值进行替换。ON改变c的值回默认的‘&,而不是最近使用的字符。设置DEFINE0FF覆盖SCAN变量的设置。更多SCAN变量的信息,参考SET SCAN命令。

SET DESCRIBE [DEPTH {1|n|ALL}][LINENUM {ON|OFF}][INDENT {ON|OFF}]

设置你可以递归描述对象的水平深度。DEPTH子句有效范围从150。如果你SET DESCRIBE DEPTH ALL,深度将会被设置为50,这是允许的最大值。当一个对象包含多个对象类型时,你爷可以显示行数和缩进显示属性或列名。使用SET LINESIZE命令来控制数据显示的宽度。

更多关于描述对象的信息,参考本章前述的DESCRIBE

举例

为了描述EMP_DETAILS_VIEW视图到2级深度,并且当也要显示行数时缩进输出,首先,向下面这样描述视图:

DESCRIBE EMP_DETAILS_VIEW

Name Null? Type

----------------------------------------- -------- ----------------------------

EMPLOYEE_ID NOT NULL NUMBER(6)

JOB_ID NOT NULL VARCHAR2(10)

MANAGER_ID NUMBER(6)

DEPARTMENT_ID NUMBER(4)

LOCATION_ID NUMBER(4)

COUNTRY_ID CHAR(2)

FIRST_NAME VARCHAR2(20)

LAST_NAME NOT NULL VARCHAR2(25)

SALARY NUMBER(8,2)

COMMISSION_PCT NUMBER(2,2)

DEPARTMENT_NAME NOT NULL VARCHAR2(30)

JOB_TITLE NOT NULL VARCHAR2(35)

CITY NOT NULL VARCHAR2(30)

STATE_PROVINCE VARCHAR2(25)

COUNTRY_NAME VARCHAR2(40)

REGION_NAME VARCHAR2(25)

为了格式化EMP_DETAILS_VIEW以便输出显示缩进和行数,使用如下的SET DESCRIBE命令:

SET DESCRIBE DEPTH 2 LINENUM ON INDENT ON

为了显示上面的设置,输入

DESCRIBE EMP_DETAILS_VIEW

Name Null? Type

------------------- -------- --------------------

1 EMPLOYEE_ID NOT NULL NUMBER(6)

2 JOB_ID NOT NULL VARCHAR2(10)

3 MANAGER_ID NUMBER(6)

4 DEPARTMENT_ID NUMBER(4)

5 LOCATION_ID NUMBER(4)

6 COUNTRY_ID CHAR(2)

7 FIRST_NAME VARCHAR2(20)

8 LAST_NAME NOT NULL VARCHAR2(25)

9 SALARY NUMBER(8,2)

10 COMMISSION_PCT NUMBER(2,2)

11 DEPARTMENT_NAME NOT NULL VARCHAR2(30)

12 JOB_TITLE NOT NULL VARCHAR2(35)

13 CITY NOT NULL VARCHAR2(30)

14 STATE_PROVINCE VARCHAR2(25)

15 COUNTRY_NAME VARCHAR2(40)

16 REGION_NAME VARCHAR2(25)

SET ECHO {ON|OFF}

控制START命令是否列出一个脚本中的每一个被执行的命令。ON表示列出命令,OFF禁止列出。

SET EDITF[ILE] file_name[.ext]

SET EDITFILEiSQL*Plus中不支持

EDIT命令设置默认的文件名。更多关于EDIT命令的信息参考本章EDIT部分。

你可以包括一个路径和(/或)文件扩展。关于改变默认扩展的信息,参考SET领命的SUFFIX变量。这个默认的文件名和最大文件名长度是操作系统指定的。

SET EMB[EDDED] {ON|OFF}

控制每个报告从一页的什么地方开始。OFF强制每个报告在一个新页的顶部开始。ON允许一个报告在一页的任何地方开始。当你想一个报告接着上个运行的报告立即开始打印时,设置EMBEDDEDON

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

SET FEED[BACK] {6|n|ON|OFF}

当一个脚本选择至少n条记录时,显示返回的记录数。ONOFF表示是否打开或者关闭这个显示。打开feedback ON设置n1.feedback设置为0等同于设置它为OFF

SET FLAGGER {OFF|ENTRY |INTERMED[IATE]|FULL}

检查以确保SQL语句符合ANSI/IOS SQL92标准。如果任何非标准的结构发现,Oracle服务器将会作为错误标志它们,并且显示语法错误。这个SQL语言ALTER SESSION SET FLAGGER命令等价。

即使在你没有连上数据库时,你也可以执行SET FLAGGERFIPS标志将会一直影响SQL*Plus会话,直到SET FLAGGER OFF(ALTER SESSION SET FLAGGER=OFF)命令成功,或者你退出SQL*Plus

FIPS标志启用时,SQL*PlusCONNECTDISCONNECTALTER SESSION SET FLAGGER命令显示一个警告,即使它们是成功的。

SET FLU[SH] {ON|OFF}

SET FLUSHiSQL*Plus中不支持

控制什么时候将输出送到用户的显示设备。OFF表示允许主机操作系统缓存输出。ON表示禁用缓存。

仅仅当你运行一个没有交互的脚本时(也就是说,你的脚本运行结束前,你都不需要看到输出和/或者提示符)使用OFFFLUSH OFF的使用减少了I/O的处理数量,可以提升性能。

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

SET HEADS[EP] {||c|ON|OFF}

定义用作标题分隔符的字符。标题分隔符不能是包括文字与数字的或者空白。你可以在COLUMN命令、在为了将一个列标题或题头分成多行的老的BTITLETTITLE表格中使用标题分隔符。ONOFF表示是否打开或关闭标题分隔符。当标题分隔符设置为OFF时,SQL*Plus像任何其它字符一样打印标题分隔符。ON修改c的值回默认值“|”。

SET INSTANCE [instance_path|LOCAL]

将你会话的默认实例修改为指定的实例路径。使用SET INSTANCE命令不会连上数据库。当没指定实例时,使用默认的实例。任何在SET INSTANCE使用前的命令都和默认的实例通信。

为了重新将实例设置成你操作系统的默认值,你既可以输入SET INSTANCE不加instance_path,也可以SET INSTANCE LOCAL。参考你的操作系统指定的Oracle文档查阅如何设置初始默认实例的描述。

注意,你只能在当前没有连接到任何一个实例时改变实例。也就是说,你必须首先确认你已经断开了当前的实例,然后设置或者修改这个实例,接着为了让新的设置生效,重连到一个实例。

这个命令只能在Oracle Net运行时发布。你可以使用任何有效的Oracle Net连接标示符作为指定的实例路径。参考你操作系统指定的Oracle文档查阅关于你的操作系统如何指定Oracle Net连接标示符的完整描述。

举例

为了默认实例为“PROD1”,输入

DISCONNECT

SET INSTANCE PROD1

为了将实例设回本地默认值,输入

SET INSTANCE local

为了改变这个实例,你必须断开任何实例的连接。

SET LIN[ESIZE] {80|n}

在开始一个新行之前,设置SQL*Plus一行的字符显示总数。它也可以控制在TTILEBTITILEREPHEADERREPFOOTER中居中或右对齐的文本的位置。改变linesize设置可以影响来自DESCRIBE命令输出文本的换行显示。DESCRIBE输出列典型地会分配给linesize的一定比例。减少或者增加linesize的大小可能会在你的显示中出现出乎预料的文本换行。你可以定义LINESIZE1到你的系统支持的最大值。查阅提供给你的操作系统的Oracle installation and user's manual(s)

SET LOBOF[FSET] {n|1}

设置获取和显示CLOBNCLOB数据的起始位置。

举例

为了将要获取的CLOB列的数据的起始位置设置成第22位,输入

SET LOBOFFSET 22

CLOB数据将会在你的屏幕上换行;SQL*Plus不会截断,直到第23个字符。

SET LOGSOURCE [pathname]

指定恢复时所需的归档日志的位置。默认值由Oracle初始化文件init.ora中的初始化参数LOG_ARCHIVE_DEST设置。不指定路径使用SET LOGSOURCE命令时从默认路径取文件。

举例

为了将日志文件恢复的默认路径设置为目录"/usr/oracle90/dbs/arch",输入

SET LOGSOURCE "/usr/oracle90/dbs/arch"

RECOVER DATABASE

SET LONG {80|n}

对于显示CLOBLONGNCLOBXML类型的值设置最大的宽度(用字节表示)。n的最大值是2GB

举例

为了设置显示和复制LONG值最大到500,输入

SET LONG 500

LONG数据将会屏显换行;SQL*Plus将会从第501个字节后截断。LONG的默认值是80字节。

SET LONGC[HUNKSIZE] {80|n}

设置SQL*Plus增量大小(按字节)来获取CLOBLONGNCLOBXML类型的值。

举例

为了在SQL*Plus中获取LONG值的增量大小设为100字节,输入

SET LONGCHUNKSIZE 100

LONG数据将会按100字节增量获取,直到整个值被获取,或者到达了SET LONG的值,二者取最小值。

[@more@]Oracle9i SET用法简介2

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35686/viewspace-1022561/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    32
  • 访问量
    690382