您的位置:首页 > 数据库 > Oracle

Oracle sqlplus 常用设置

2014-04-08 20:06 453 查看


Oracle sqlplus 常用设置

§2.5 SQLPLUS常用设置

使用过程中大都需要进行必要的环境设置才能完成我们所需要的输出。

所有环境的设置由SET命令加相应的环境变量来完成。下面是常用的环境设置:

§2.5.1   ARRAYSIZE(取回的行数)

SET ARRAY[SIZE]{integer}

一次可以提取(Fetch)的行的数目,1->5000,当有较长字段时应设小些。

§2.5.2   AUTOCOMMIT(自动提交)

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

用于在操作中是自动提交或是部分提交或是不自动提交。

1) 或IMM使得在完成每条SQL语句时将未提交的改变立刻提交给数据库系统。ON

2) 允许在用户发出COMMIT后,可以执行命令的数量(将n条SQL语句所做的改变进行提交)。N

3) 停止自动提交,用户必须用COMMIT命令才能被提交。OFF

§2.5.3   LINESIZE(行显示宽度)

可以设置LINESIZE环境变量来控制行的显示宽度,缺省是80个字符。

SET    Lin[esize]{80|integer}

Integer =设置行宽度(字符个数),最大值999,如:

SQL>set linesize 160

§2.5.4   LONG(长类型显示字节数)

在缺省的SQL> 状态下,SQL>缓冲区用于显示LONG 的字节数只有80个字符。如果我们需要查询的列中含有 LONG类型的字段的话,就需要将LONG缓冲区设置大些。

SET LONG{80|integer}

Integer是 显示或拷贝long值的最大宽度, n=1->32767(但必须小于Maxdata值)

SQL>show Maxdata (最大行宽)

SQL>set long 2000

§2.5.5   PAGESIZE(页行数)

在缺省的SQL> 状态下,SQL>缓冲区显示页的行数是24行,其中22行显示数据,2行显示标题和横线。我们将pagesize 设置大些以减少提示标题和横线。

SET pag[esize]   {24|integer}

SQL>SET pagesize 66

§2.5.6   PAUSE(暂停)

可以设置 PAUSE 为ON 或OFF来控制屏幕显示。当设置为ON 时,在select 语句发出后需要按Enter键才能显示一屏。

SET PAUSE [ ON | OFF ]

SQL> setpause on

提示:在发出select 语句并按Enter键后还要再按Enter键才能显示结果.

§2.5.7   SPACE(列间空格)

可用 set space 来设置各列间的空格数,语法为:

SET   SPA[CE]    {1|n}

N为设置输出行列间的空格数,最大为10。

SQL>set space 2

建议:在一般情况下,不用设置space参数。

§2.5.8   Termout (启/停屏幕显示)

TERMOUT用于设置在屏幕上显示或不显示所输出的信息。

SET TERMOUT { ON | OFF }

set    termout off

set    termout on

set   termout off  常用SPOOL XXX时,即关闭报表在屏幕上的显示(节省时间)

set   termout on   常用SPOOL   off之后,即恢复报表在屏幕上的显示

§2.5.9   ECHO (启/停命令显示)

可以用ECHO命令来显示或不显示所执行的SQL命令。语法如:

SET   ECHO{OFF|ON}

显示执行当中的各命令( 即用start 时)

set   echo   受到   set   termout 的影响

set pagesize 100

set echo on

select table_name from dict where rownum<20;

select * from cat where rownum<30;

set echo off

--下面只显示结果不显示命令:

select table_name from dict where rownum<20;

select * from cat where rownum<30;

§2.5.10 TRANSACTION (启动事务)

一个很重要的事务环境设置是TRANSACTION。它包括两个部分的内容:

SET TRANSACTION { READ ONLY | USE ROLLBACK SEGMENT segment_name }

READ ONLY是用于保证读的一致性。即其他用户的修改不影响当前查询结果。

USE ROLLBACK SEGMENT segment_name是为当前所处理的事务指定专门的回滚段。这主要是在进行大量的Insert或Delete或Update时,需要一个大的回滚段以保证事务正常完成。详细见数据库管理员。

§2.5.11 SHOW ALL(列出所有参数)

可以用SHOW ALL来显示当前的所有参数情况。它的用法很简单。比如:

SQL> show all

appinfo为ON并且已设置为"SQL*Plus"

arraysize 15

autocommit OFF

autoprint OFF

autorecovery OFF

autotrace OFF

blockterminator "." (hex 2e)

btitle OFF and为下一条SELECT语句的前几个字符

cmdsep OFF

colsep " "

compatibility version NATIVE

concat "." (hex 2e)

copycommit 0

COPYTYPECHECK为ON

define "&" (hex 26)

describe DEPTH 1 LINENUM OFF INDENT ON

markup HTML OFF SPOOL OFF ENTMAP ON PREFORMAT OFF

echo OFF

editfile "afiedt.buf"

embedded OFF

escape OFF

flagger OFF

flush ON

heading ON

headsep "|" (hex 7c)

instance "local"

linesize 80

lno 14

loboffset 1

logsource ""

long 80

longchunksize 80

newpage 1

null ""

numformat ""

numwidth 10

pagesize 14

PAUSE为OFF

pno 0

recsep WRAP

recsepchar " " (hex 20)

release 801070000

repfooter OFF and为NULL

repheader OFF and为NULL

serveroutput OFF

shiftinout INVISIBLE

showmode OFF

spool OFF

sqlblanklines OFF

sqlcase MIXED

sqlcode 0

sqlcontinue "> "

sqlnumber ON

sqlprefix "#" (hex 23)

sqlprompt "SQL> "

sqlterminator ";" (hex 3b)

suffix "sql"

tab ON

termout ON

time OFF

timing OFF

trimout ON

trimspool OFF

ttitle OFF and为下一条SELECT语句的前几个字符

underline "-" (hex 2d)

USER为"SYS"

verify ON

wrap :行将为已换行

SQL>

你可以从上面的参数中看到其当前值,也可以修改某些参数的值。

格式化输出

§2.6.1  一般数据的格式化输出

在Oracle的SQL>下,经常用COLUMN命令来对所输出的列进行格式化,即按照一定的格式进行显示。COLMUN命令语法如下:

COL[UMN] [{ column | expr } [ option_1 ... option_n ] ]

column:列名

expr:有效的SQL表达式

option_1...option_n:可以是下列之一:

ALI[AS] alias

CLE[AR]

FOLD_A[FTER]

FOLD_B[EFORE]

FOR[MAT] format

HEA[DING] text

JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}

LIKE {expr|alias}

NEWL[INE]

NEW_V[ALUE] variable

NOPRI[NT]|PRI[NT]

NUL[L] text

OLD_V[ALUE] variable

ON|OFF

WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]

下面给出常用的关键字的解释:

Alias    给出列的别名,BREAK和COUMN可以引用所定义的别名。

CLEAR 取消列的定义。

FORMAT列显示格式,format为:

9999990     9或0的个数决定最多显示多少位

9,999,999.99按照逗号和小数点来显示数据,若是0以空格显示

099999     显示前面补0

$999,999.99 数字前加美圆号

B99999     若为0,则结果为空白

99999Mi    若数字为负,则负号放在数字后(右边),缺省放在左边

99999PR     负号将以括号括起

9.999EEEE  以科学记数法表示(必须有4个E)

999V99     数字乘以10n ,如1234变为123400

DATE      采用日期数字格式(MM/DD/YY)

Heading重新标记列的显示标题,如:

SQL> col ename heading 姓名format a10

SQL> select ename,sal from emp;

例子:

SQL

COLUMN  SALARY  FOR  $9,999,999.99

COLUMN  LAST_NAME  FOR  A35.

§2.6.2  日期的格式化输出

Oracle系统提供了一个NLS_DATE_FORMAT的环境变量来设置日期的显示格式。用它可以完成按照不同格式要求的显示,比如按照中国的习惯为yyyy年mm月dd日等。

1.系统日期 sysdate 的显示

用sysdate 可以显示ORACLE RDBMS 所在机器的日期及时间,如:

SQL> alter session set nls_date_format ='"公元"yyyy"年"mm"月"dd"日"';

会话已更改。

SQL> select sysdate from dual;

SYSDATE

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

公元2001年05月30日

2.日期类型的显示

select sysdate,to_char(sysdate,’yyyy.mm.dd hh24:mi;ss’) from dual;

SQL> connect scott/tiger

已连接。

SQL> alter session set nls_date_format ='yyyy"年"mm"月"dd"日生"';

会话已更改。

SQL> col HIREDATE heading生日

SQL> col sal heading工资

SQL> col sal ename姓名

SQL> select ename,sal,hiredate from emp;

姓名            工资            生日

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

SMITH             800 1980年12月17日生

ALLEN            1600 1981年02月20日生

WARD             1250 1981年02月22日生

JONES            2975 1981年04月02日生

MARTIN           1250 1981年09月28日生

BLAKE            2850 1981年05月01日生

CLARK            2450 1981年06月09日生

SCOTT            3000 1987年04月19日生

KING             5000 1981年11月17日生

TURNER           1500 1981年09月08日生

ADAMS            1100 1987年05月23日生

JAMES             950 1981年12月03日生

FORD             3000 1981年12月03日生

MILLER           1300 1982年01月23日生

已选择14行。

§2.7 加标题

有时在输出一些结果时,可能需要加一些标题,如表上面的顶标题,落款等。这样的要求可由Ttitle和Btitle来完成。

ttitle和btitle

ttitle   [center|left|right]string   顶标题

btitle   [center|left|right]string   底标题

ttitle   center   'XX公司人员情况表'

btitle   left     '制表人:xxxx'   right    '日期:xxxx年xx月'

Clear    ttitle

§2.8 建立简单报告

我们可以用TTITLE、BTITLE、COLUMN、BREAK ON、COMPUTE SUM及SET LINESIZE、SET PAGESIZE、SET NEWPAGE来设置查询结果的显示格式;在用SPOOL命令将显示结果输出到一个操作系统文件中去,一般输出文件的类型为.LST。

建立简单报告主要使用下面命令来实现:

1. SPOOL命令

SPOOL   filename     将缓冲区的内容写到文件中

SPOOL   off          终止写命令

2. COLUMN  命令

column    col_name[,heading]    format     format_spe

把字段的结果指定为一种输出格式

COL   name   heading   '姓名'   for    a10

COL    sal      heading   '工资'    for    9,999.99

3.ttitle、btitle

ttitle   [center|left|right]string   顶标题

btitle   [center|left|right]string   底标题

ttitle   center   'XX公司人员情况表'

btitle   left     '制表人:赵元杰'   right    '日期:1998.11月'

Clear    ttitle

4.break、compute

clear    breaks,clear    computes

break   on   column    在该列上中断

break   on   row       在每一行上中断

break   on    Page

break   on    report

skip     n              跳过n行

skip     page           跳过未用完的页

compute       avg

compute      count

compute       max

compute       min

compute       std

compute       sum

compute       var

compute       num    计算所有行

compute       sum   of   sal   on   deptno

5.set  在报表中的设置

l      set    termout    off、set   termout   on命令

l      set   termout    off  常用SPOOL    XXX前,即关闭报表在屏幕上的显示(节省时间)

l      set   termout    on   常用SPOOL   off之后,即恢复报表在屏幕上的显示

l      set   ECHO{OFF|ON} 显示执行当中的各命令(即用start   时),set   echo   受到   set   termout   的影响

l      set    Lin[esize]{80|integer}   设置行宽度,最大值999

l      set pag[esize]   {24|integer}  设置页的大小

例子:

SQL>COL ename heading ‘姓名’ for a12

SQL>COL sal heading ‘工资’ for a999,999.99

SQL>COL hiredate heading ‘出生’

SQL>SET LINESIZE 200

SQL>SET PAGESIZE 60

SQL>SPOOL c:\all_emp

SQL>select ename,sal,deptno,hiredate from emp order by deptno;

SQL>SPOOL OFF

§2.9 输入变量

Oracle提供一种在处理SQL语句时可以将参数作为变量来对待的技术,即在条件句中可以是变量而不是具体的值,这样的处理就是输入变量。这样做的目的就是可以重复使用同样的语句,每次只要输入相应的值即可。要实现将参数写成为变量,只要在变量前加一个&号即可。看下面语句:

Select sid, serial#,username, command from v$session

Where   USERNAME = upper(‘&usr’);

这样的语句在运行中,系统会自动提示你回答变量的具体值,上面语句运行时提示和回答时显示的信息如下:

SQL> Select sid, serial#,username, command from v$session

2 Where   USERNAME = upper('&usr');

输入 usr 的值: sys

原值    2: Where   USERNAME = upper('&usr')

新值    2: Where   USERNAME = upper('sys')

   SID SERIAL# USERNAME      COMMAND

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

         7      26 SYS                       3

在变量说明中,可以使用多个变量,比如:

Alter system kill session ‘&sid,&ser’;



Alter system kill session ‘&会话号,&序列号’;

它的运行情况如下:

SQL> Select sid, serial#,username, command from v$session;

   SID SERIAL# USERNAME       COMMAND

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

         1          1                 0

         2          1                 0

         3          1                 0

         4          1                 0

         5          1                 0

         6          1                 0

         7         26 SYS             3

         8         16 ZHAO           0

已选择8行。

SQL> Alter system kill session '&sid,&ser';

输入sid的值: 8

输入ser的值: 16

原值    1: Alter system kill session '&sid,&ser'

新值    1: Alter system kill session '8,16'

系统已更改。

一般系统缺省下是使用 “&” 符号来定义变量,你也可以使用另外的符号来代替,比如不喜欢用 & 而要用 ?,则有:

SQL> set define ?

SQL> select sid,serial#,username from v$session where username='?usr';

输入 usr 的值: SYS

原值    1: select sid,serial#,username from v$session where username='?usr'

新值    1: select sid,serial#,username from v$session where username='SYS'

       SID    SERIAL# USERNAME

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

7                               26 SYS
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: