zoukankan      html  css  js  c++  java
  • SQL*PLUS命令的使用大全

         Oracle的sql*plus是与oracle进行交互的客户端工具。在sql*plus中,可以运行sql*plus命令与sql*plus语句。
       我们通常所说的DML、DDL、DCL语句都是sql*plus语句,它们执行完后,都可以保存在一个被称为sql buffer的内存区域中,并且只能保存一条最近执行的sql语句,我们可以对保存在sql buffer中的sql 语句进行修改,然后再次执行,sql*plus一般都与数据库打交道。
       除了sql*plus语句,在sql*plus中执行的其它语句我们称之为sql*plus命令。它们执行完后,不保存在sql buffer的内存区域中,它们一般用来对输出的结果进行格式化显示,以便于制作报表。
       下面就介绍一下一些常用的sql*plus命令:
     
    1. 执行一个SQL脚本文件
    SQL>start file_name
    SQL>@ file_name
    我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。
     
    @与@@的区别是什么?
    @等于start命令,用来运行一个sql脚本文件。
    @命令调用当前目录下的,或指定全路径,或可以通过SQLPATH环境变量搜寻到的脚本文件。该命令使用是一般要指定要执行的文件的全路径,否则从缺省路径(可用SQLPATH变量指定)下读取指定的文件。
    @@用在sql脚本文件中,用来说明用@@执行的sql脚本文件与@@所在的文件在同一目录下,而不用指定要执行sql脚本文件的全路径,也不是从SQLPATH环境变量指定的路径中寻找sql脚本文件,该命令一般用在脚本文件中。
    如:在c:\temp目录下有文件start.sql和nest_start.sql,start.sql脚本文件的内容为:
    @@nest_start.sql     - - 相当于@ c:\temp\nest_start.sql
    则我们在sql*plus中,这样执行:
    SQL> @ c:\temp\start.sql
     

    2. 对当前的输入进行编辑
    SQL>edit
     
    3. 重新运行上一次运行的sql语句
    SQL>/
     
    4. 将显示的内容输出到指定文件
    SQL> SPOOL file_name
       在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。
     
    5. 关闭spool输出
    SQL> SPOOL OFF
       只有关闭spool输出,才会在输出文件中看到输出的内容。
     
    6.显示一个表的结构
    SQL> desc table_name
     
    7. COL命令:
    主要格式化列的显示形式。
    该命令有许多选项,具体如下:
    COL[UMN] [{ column|expr} [ option ...]]
    Option选项可以是如下的子句:
    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]
     
    1). 改变缺省的列标题
    COLUMN column_name HEADING column_heading
    For example:
    Sql>select * from dept;
         DEPTNO DNAME                        LOC
    ---------- ---------------------------- ---------
             10 ACCOUNTING                   NEW YORK
    sql>col  LOC heading location
    sql>select * from dept;
        DEPTNO DNAME                        location
    --------- ---------------------------- -----------
            10 ACCOUNTING                   NEW YORK
     
    2). 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上:
    Sql>select * from emp
    Department  name           Salary
    ---------- ---------- ----------
             10 aaa                11        
    SQL> COLUMN ENAME HEADING ’Employee|Name’
    Sql>select * from emp
                Employee
    Department  name           Salary
    ---------- ---------- ---------- 
             10 aaa                11
    note: the col heading turn into two lines from one line.
     
    3). 改变列的显示长度:
    FOR[MAT] format
    Sql>select empno,ename,job from emp;
          EMPNO ENAME      JOB       
    ---------- ----------     ---------
           7369 SMITH      CLERK     
           7499 ALLEN      SALESMAN  
    7521 WARD       SALESMAN  
    Sql> col ename format a40
          EMPNO ENAME                                    JOB
    ----------   ----------------------------------------         ---------
           7369 SMITH                                    CLERK
           7499 ALLEN                                    SALESMAN
           7521 WARD                                    SALESMAN
     
    4). 设置列标题的对齐方式
    JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}
    SQL> col ename justify center
    SQL> /
          EMPNO           ENAME                   JOB
    ----------   ----------------------------------------       ---------
           7369 SMITH                                    CLERK
           7499 ALLEN                                    SALESMAN
    7521 WARD                                     SALESMAN
    对于NUMBER型的列,列标题缺省在右边,其它类型的列标题缺省在左边
     
    5). 不让一个列显示在屏幕上
    NOPRI[NT]|PRI[NT]
    SQL> col job noprint
    SQL> /
          EMPNO           ENAME
    ----------     ----------------------------------------
           7369 SMITH
           7499 ALLEN
    7521 WARD
     
    6). 格式化NUMBER类型列的显示:
    SQL> COLUMN SAL FORMAT $99,990
    SQL> /
    Employee
    Department Name        Salary    Commission
    ---------- ---------- --------- ----------
    30          ALLEN        $1,600    300
     
    7). 显示列值时,如果列值为NULL值,用text值代替NULL值
    COMM NUL[L] text
    SQL>COL COMM NUL[L] text
     
    8). 设置一个列的回绕方式
    WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]
            COL1
    --------------------
    HOW ARE YOU?
     
    SQL>COL COL1 FORMAT A5
    SQL>COL COL1 WRAPPED
    COL1
    -----
    HOW A
    RE YO
    U?
     
    SQL> COL COL1 WORD_WRAPPED
    COL1
    -----
    HOW
    ARE
    YOU?
     
    SQL> COL COL1 WORD_WRAPPED
    COL1
    -----
    HOW A
     
    9). 显示列的当前的显示属性值
    SQL> COLUMN column_name
     
    10). 将所有列的显示属性设为缺省值
    SQL> CLEAR COLUMNS
     
    8. 屏蔽掉一个列中显示的相同的值
    BREAK ON break_column
    SQL> BREAK ON DEPTNO
    SQL> SELECT DEPTNO, ENAME, SAL
    FROM EMP
      WHERE SAL < 2500
      ORDER BY DEPTNO;
    DEPTNO      ENAME         SAL
    ---------- ----------- ---------
    10           CLARK        2450
    MILLER      1300
    20            SMITH       800
    ADAMS       1100
     
    9. 在上面屏蔽掉一个列中显示的相同的值的显示中,每当列值变化时在值变化之前插入n个空行。
    BREAK ON break_column SKIP n
     
    SQL> BREAK ON DEPTNO SKIP 1
    SQL> /
    DEPTNO ENAME SAL
    ---------- ----------- ---------
    10 CLARK 2450
    MILLER 1300
     
    20 SMITH 800
    ADAMS 1100
     
    10. 显示对BREAK的设置
    SQL> BREAK
     
    11. 删除6、7的设置
    SQL> CLEAR BREAKS
     
    12. Set 命令:
    该命令包含许多子命令:
    SET system_variable value
    system_variable value 可以是如下的子句之一:
    APPI[NFO]{ON|OFF|text}
    ARRAY[SIZE] {15|n}
    AUTO[COMMIT]{ON|OFF|IMM[EDIATE]|n}
    AUTOP[RINT] {ON|OFF}
    AUTORECOVERY [ON|OFF]
    AUTOT[RACE] {ON|OFF|TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
    BLO[CKTERMINATOR] {.|c}
    CMDS[EP] {;|c|ON|OFF}
    COLSEP {_|text}
    COM[PATIBILITY]{V7|V8|NATIVE}
    CON[CAT] {.|c|ON|OFF}
    COPYC[OMMIT] {0|n}
    COPYTYPECHECK {ON|OFF}
    DEF[INE] {&|c|ON|OFF}
    DESCRIBE [DEPTH {1|n|ALL}][LINENUM {ON|OFF}][INDENT {ON|OFF}]
    ECHO {ON|OFF}
    EDITF[ILE] file_name[.ext]
    EMB[EDDED] {ON|OFF}
    ESC[APE] {\|c|ON|OFF}
    FEED[BACK] {6|n|ON|OFF}
    FLAGGER {OFF|ENTRY |INTERMED[IATE]|FULL}
    FLU[SH] {ON|OFF}
    HEA[DING] {ON|OFF}
    HEADS[EP] {||c|ON|OFF}
    INSTANCE [instance_path|LOCAL]
    LIN[ESIZE] {80|n}
    LOBOF[FSET] {n|1}
    LOGSOURCE [pathname]
    LONG {80|n}
    LONGC[HUNKSIZE] {80|n}
    MARK[UP] HTML [ON|OFF] [HEAD text] [BODY text] [ENTMAP {ON|OFF}] [SPOOL
    {ON|OFF}] [PRE[FORMAT] {ON|OFF}]
    NEWP[AGE] {1|n|NONE}
    NULL text
    NUMF[ORMAT] format
    NUM[WIDTH] {10|n}
    PAGES[IZE] {24|n}
    PAU[SE] {ON|OFF|text}
    RECSEP {WR[APPED]|EA[CH]|OFF}
    RECSEPCHAR {_|c}
    SERVEROUT[PUT] {ON|OFF} [SIZE n] [FOR[MAT] {WRA[PPED]|WOR[D_
    WRAPPED]|TRU[NCATED]}]
    SHIFT[INOUT] {VIS[IBLE]|INV[ISIBLE]}
    SHOW[MODE] {ON|OFF}
    SQLBL[ANKLINES] {ON|OFF}
    SQLC[ASE] {MIX[ED]|LO[WER]|UP[PER]}
    SQLCO[NTINUE] {> |text}
    SQLN[UMBER] {ON|OFF}
    SQLPRE[FIX] {#|c}
    SQLP[ROMPT] {SQL>|text}
    SQLT[ERMINATOR] {;|c|ON|OFF}
    SUF[FIX] {SQL|text}
    TAB {ON|OFF}
    TERM[OUT] {ON|OFF}
    TI[ME] {ON|OFF}
    TIMI[NG] {ON|OFF}
    TRIM[OUT] {ON|OFF}
    TRIMS[POOL] {ON|OFF}
    UND[ERLINE] {-|c|ON|OFF}
    VER[IFY] {ON|OFF}
    WRA[P] {ON|OFF}
     
    1). 设置当前session是否对修改的数据进行自动提交
    SQL>SET AUTO[COMMIT] {ON|OFF|IMM[EDIATE]| n}
     
    2).在用start命令执行一个sql脚本时,是否显示脚本中正在执行的SQL语句
    SQL> SET ECHO {ON|OFF}
     
    3).是否显示当前sql语句查询或修改的行数
    SQL> SET FEED[BACK] {6|n|ON|OFF}
       默认只有结果大于6行时才显示结果的行数。如果set feedback 1 ,则不管查询到多少行都返回。当为off 时,一律不显示查询的行数
     
    4).是否显示列标题
    SQL> SET HEA[DING] {ON|OFF}
    当set heading off 时,在每页的上面不显示列标题,而是以空白行代替
     
    5).设置一行可以容纳的字符数
    SQL> SET LIN[ESIZE] {80|n}
       如果一行的输出内容大于设置的一行可容纳的字符数,则折行显示。
     
    6).设置页与页之间的分隔
    SQL> SET NEWP[AGE] {1|n|NONE}
    当set newpage 0 时,会在每页的开头有一个小的黑方框。
    当set newpage n 时,会在页和页之间隔着n个空行。
    当set newpage none 时,会在页和页之间没有任何间隔。
     
    7).显示时,用text值代替NULL值
    SQL> SET NULL text
     
    8).设置一页有多少行数
    SQL> SET PAGES[IZE] {24|n}
    如果设为0,则所有的输出内容为一页并且不显示列标题
     
    9).是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息。
    SQL> SET SERVEROUT[PUT] {ON|OFF} 
    在编写存储过程时,我们有时会用dbms_output.put_line将必要的信息输出,以便对存储过程进行调试,只有将serveroutput变量设为on后,信息才能显示在屏幕上。
     
    10).当SQL语句的长度大于LINESIZE时,是否在显示时截取SQL语句。
    SQL> SET WRA[P] {ON|OFF}
       当输出的行的长度大于设置的行的长度时(用set linesize n命令设置),当set wrap on时,输出行的多于的字符会另起一行显示,否则,会将输出行的多于字符切除,不予显示。
     
    11).是否在屏幕上显示输出的内容,主要用与SPOOL结合使用。
    SQL> SET TERM[OUT] {ON|OFF}
       在用spool命令将一个大表中的内容输出到一个文件中时,将内容输出在屏幕上会耗费大量的时间,设置set termspool off后,则输出的内容只会保存在输出文件中,不会显示在屏幕上,极大的提高了spool的速度。
     
    12).将SPOOL输出中每行后面多余的空格去掉
    SQL> SET TRIMS[OUT] {ON|OFF} 
       
    13)显示每个sql语句花费的执行时间
    set TIMING  {ON|OFF}
     
    14). 遇到空行时不认为语句已经结束,从后续行接着读入。
    SET SQLBLANKLINES ON
    Sql*plus中, 不允许sql语句中间有空行, 这在从其它地方拷贝脚本到sql*plus中执行时很麻烦. 比如下面的脚本:
    select deptno, empno, ename
    from emp
     
    where empno = '7788';
    如果拷贝到sql*plus中执行, 就会出现错误。这个命令可以解决该问题
     
    15).设置DBMS_OUTPUT的输出
    SET SERVEROUTPUT ON BUFFER 20000
    用dbms_output.put_line('strin_content');可以在存储过程中输出信息,对存储过程进行调试
    如果想让dbms_output.put_line('     abc');的输出显示为:
    SQL>     abc,而不是SQL>abc,则在SET SERVEROUTPUT ON后加format wrapped参数。
     
    16). 输出的数据为html格式
    set markup html
    在8.1.7版本(也许是816? 不太确定)以后, sql*plus中有一个set markup html的命令, 可以将sql*plus的输出以html格式展现.
    注意其中的spool on, 当在屏幕上输出的时候, 我们看不出与不加spool on有什么区别, 但是当我们使用spool filename 输出到文件的时候, 会看到spool文件中出现了等tag.
     

    14.修改sql buffer中的当前行中,第一个出现的字符串
    C[HANGE] /old_value/new_value
    SQL> l
       1* select * from dept
    SQL> c/dept/emp
       1* select * from emp
     
    15.编辑sql buffer中的sql语句
    EDI[T]
     
    16.显示sql buffer中的sql语句,list n显示sql buffer中的第n行,并使第n行成为当前行
    L[IST] [n]
     
    17.在sql buffer的当前行下面加一行或多行
    I[NPUT]
     
    18.将指定的文本加到sql buffer的当前行后面
    A[PPEND]
    SQL> select deptno,
       2  dname
       3  from dept;
         DEPTNO DNAME
    ---------- --------------
             10 ACCOUNTING
             20 RESEARCH
             30 SALES
             40 OPERATIONS
     
    SQL> L 2
       2* dname
    SQL> a ,loc
       2* dname,loc
    SQL> L
       1  select deptno,
       2  dname,loc
       3* from dept
    SQL> /
     
         DEPTNO DNAME          LOC
    ---------- -------------- -------------
             10 ACCOUNTING     NEW YORK
             20 RESEARCH       DALLAS
             30 SALES          CHICAGO
             40 OPERATIONS     BOSTON
     
    19.将sql buffer中的sql语句保存到一个文件中
    SAVE file_name
     
    20.将一个文件中的sql语句导入到sql buffer中
    GET file_name
     
    21.再次执行刚才已经执行的sql语句
    RUN
    or
    /
     
    22.执行一个存储过程
    EXECUTE procedure_name
     
    23.在sql*plus中连接到指定的数据库
    CONNECT
    user_name/passwd@db_alias
     
    24.设置每个报表的顶部标题
    TTITLE
     
    25.设置每个报表的尾部标题
    BTITLE
     
    26.写一个注释
    REMARK [text]
     
    27.将指定的信息或一个空行输出到屏幕上
    PROMPT [text]
     
    28.将执行的过程暂停,等待用户响应后继续执行
    PAUSE [text]
     
    Sql>PAUSE Adjust paper and press RETURN to continue.
     
    29.将一个数据库中的一些数据拷贝到另外一个数据库(如将一个表的数据拷贝到另一个数据库)
    COPY {FROM database | TO database | FROM database TO database}
    {APPEND|CREATE|INSERT|REPLACE} destination_table
    [(column, column, column, ...)] USING query
     
    sql>COPY FROM
    SCOTT/TIGER@HQ TO JOHN/CHROME@WEST 
    create emp_temp
    USING SELECT * FROM EMP
     
    30.不退出sql*plus,在sql*plus中执行一个操作系统命令:
    HOST
     
    Sql> host hostname
    该命令在windows下可能被支持。
     
    31.在sql*plus中,切换到操作系统命令提示符下,运行操作系统命令后,可以再次切换回sql*plus:
    !
     
    sql>!
    $hostname
    $exit
    sql>
     
    该命令在windows下不被支持。
     
    32.显示sql*plus命令的帮助
    HELP
    如何安装帮助文件:
    Sql>@ ?\sqlplus\admin\help\hlpbld.sql ?\sqlplus\admin\help\helpus.sql
    Sql>help index
     
    33.显示sql*plus系统变量的值或sql*plus环境变量的值
    Syntax
    SHO[W] option
    where option represents one of the following terms or clauses:
    system_variable
    ALL
    BTI[TLE]
    ERR[ORS] [{FUNCTION|PROCEDURE|PACKAGE|PACKAGE BODY|
    TRIGGER|VIEW|TYPE|TYPE BODY} [schema.]name]
    LNO
    PARAMETERS [parameter_name]
    PNO
    REL[EASE]
    REPF[OOTER]
    REPH[EADER]
    SGA
    SPOO[L]
    SQLCODE
    TTI[TLE]
    USER
     
    1) . 显示当前环境变量的值:
    Show all
     
    2) . 显示当前在创建函数、存储过程、触发器、包等对象的错误信息
    Show error
    当创建一个函数、存储过程等出错时,变可以用该命令查看在那个地方出错及相应的出错信息,进行修改后再次进行编译。
     
    3) . 显示初始化参数的值:
    show PARAMETERS [parameter_name]
     
    4) . 显示数据库的版本:
    show REL[EASE]
     
    5) . 显示SGA的大小
    show SGA
     
    6). 显示当前的用户名
    show user
     
    34.查询一个用户下的对象
    SQL>select * from tab;
    SQL>select * from user_objects;
     
    35.查询一个用户下的所有的表
    SQL>select * from user_tables;
     
    36.查询一个用户下的所有的索引
    SQL>select * from user_indexes;
     

    37. 定义一个用户变量
    方法有两个:
    a. define
    b. COL[UMN] [{column|expr} NEW_V[ALUE] variable [NOPRI[NT]|PRI[NT]]
                                OLD_V[ALUE] variable  [NOPRI[NT]|PRI[NT]]
     
    下面对每种方式给予解释:
    a. Syntax
    DEF[INE] [variable]|[variable = text]
    定义一个用户变量并且可以分配给它一个CHAR值。
     
    assign the value MANAGER to the variable POS, type:
    SQL> DEFINE POS = MANAGER
     
    assign the CHAR value 20 to the variable DEPTNO, type:
    SQL> DEFINE DEPTNO = 20
     
    list the definition of DEPTNO, enter
    SQL> DEFINE DEPTNO
            ―――――――――――――――
    DEFINE DEPTNO = ”20” (CHAR)
     
    定义了用户变量POS后,就可以在sql*plus中用&POS或&&POS来引用该变量的值,sql*plus不会再提示你给变量输入值。
     
    b. COL[UMN] [{column|expr} NEW_V[ALUE] variable [NOPRI[NT]|PRI[NT]]
    NEW_V[ALUE] variable
    指定一个变量容纳查询出的列值。
    例:column col_name new_value var_name noprint
       select col_name from table_name where ……..
    将下面查询出的col_name列的值赋给var_name变量.
     
    一个综合的例子:
    得到一个列值的两次查询之差(此例为10秒之内共提交了多少事务):
    column redo_writes new_value commit_count
     
    select sum(stat.value) redo_writes
    from v$sesstat stat, v$statname sn
    where stat.statistic# = sn.statistic#
    and sn.name = 'user commits';
     
    -- 等待一会儿(此处为10秒);
    execute dbms_lock.sleep(10);
     
    set veri off
    select sum(stat.value) - &commit_count commits_added
    from v$sesstat stat, v$statname sn
    where stat.statistic# = sn.statistic#
    and sn.name = 'user commits';
     

    38. 定义一个绑定变量
    VAR[IABLE] [variable [NUMBER|CHAR|CHAR (n)|NCHAR|NCHAR (n) |VARCHAR2 (n)|NVARCHAR2 (n)|CLOB|NCLOB|REFCURSOR]]
    定义一个绑定变量,该变量可以在pl/sql中引用。
    可以用print命令显示该绑定变量的信息。
    如:
    column inst_num  heading "Inst Num"  new_value inst_num  format 99999;
    column inst_name heading "Instance"  new_value inst_name format a12;
    column db_name   heading "DB Name"   new_value db_name   format a12;
    column dbid      heading "DB Id"     new_value dbid      format 9999999999 just c;
     
    prompt
    prompt Current Instance
    prompt ~~~~~~~~~~~~~~~~
     
    select d.dbid            dbid
         , d.name            db_name
         , i.instance_number inst_num
         , i.instance_name   inst_name
      from v$database d,
           v$instance i;
     
    variable dbid       number;
    variable inst_num   number;
    begin
      :dbid      :=  &dbid;
      :inst_num  :=  &inst_num;
    end;
    /
    说明:
    在sql*plus中,该绑定变量可以作为一个存储过程的参数,也可以在匿名PL/SQL块中直接引用。为了显示用VARIABLE命令创建的绑定变量的值,可以用print命令
     
    注意:
    绑定变量不同于变量:
    1.        定义方法不同
    2.        引用方法不同
    绑定变量::variable_name
            变量:&variable_name or &&variable_name
    3.在sql*plus中,可以定义同名的绑定变量与用户变量,但是引用的方法不同。
     
    39. &与&&的区别
    &用来创建一个临时变量,每当遇到这个临时变量时,都会提示你输入一个值。
    &&用来创建一个持久变量,就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样。当用&&命令引用这个变量时,不会每次遇到该变量就提示用户键入值,而只是在第一次遇到时提示一次。
     
    如,将下面三行语句存为一个脚本文件,运行该脚本文件,会提示三次,让输入deptnoval的值:
    select count(*) from emp where deptno = &deptnoval;
    select count(*) from emp where deptno = &deptnoval;
    select count(*) from emp where deptno = &deptnoval;
     
    将下面三行语句存为一个脚本文件,运行该脚本文件,则只会提示一次,让输入deptnoval的值:
    select count(*) from emp where deptno = &&deptnoval;
    select count(*) from emp where deptno = &&deptnoval;
    select count(*) from emp where deptno = &&deptnoval;
     
    40.在输入sql语句的过程中临时先运行一个sql*plus命令(摘自www.itpub.com)
    #
    有没有过这样的经历? 在sql*plus中敲了很长的命令后, 突然发现想不起某个列的名字了, 如果取消当前的命令,待查询后再重敲, 那太痛苦了. 当然你可以另开一个sql*plus窗口进行查询, 但这里提供的方法更简单.
     
    比如说, 你想查工资大于4000的员工的信息, 输入了下面的语句:
     
    SQL> select deptno, empno, ename
    2 from emp
    3 where
    这时, 你发现你想不起来工资的列名是什么了.
     
    这种情况下, 只要在下一行以#开头, 就可以执行一条sql*plus命令, 执行完后, 刚才的语句可以继续输入
     
    SQL>> select deptno, empno, ename
    2 from emp
    3 where
    6 #desc emp
    Name Null? Type
    ----------------------------------------- -------- --------------
    EMPNO NOT NULL NUMBER(4)
    ENAME VARCHAR2(10)
    JOB VARCHAR2(9)
    MGR NUMBER(4)
    HIREDATE DATE
    SAL NUMBER(7,2)
    COMM NUMBER(7,2)
    DEPTNO NUMBER(2)
     
    6 sal > 4000;
     
    DEPTNO EMPNO ENAME
    ---------- ---------- ----------
    10 7839 KING
     
    41. SQLPlus中的快速复制和粘贴技巧(摘自www.cnoug.org)
    1) 鼠标移至想要复制内容的开始
    2) 用右手食指按下鼠标左键
    3) 向想要复制内容的另一角拖动鼠标,与Word中选取内容的方法一样
    4) 内容选取完毕后(所选内容全部反显),鼠标左键按住不动,用右手中指按鼠标右键
    5) 这时,所选内容会自动复制到SQL*Plus环境的最后一行
    /**********************************************************************************/
    关于FORMAT的提示:
     
    ¨         文字各式的设置,用A[n]来表示,n表示显示的长度。那么这个文字列的显示长度就按照N个字符的宽度,如果内容>N,就会自动转行。如图2
     
    ¨         日期格式,sqlplus缺省显示的日期格式按照nls_lang设置来显示。缺省是A9。那么,你可以通过设置数据库启动参数,或者sqlplus的环境变量,或者用alter session命令来规范日期的显示;也可以通过to_char来转换显示内容;也可以用column命令来指定显示长度。
     
    ¨         数字格式,说明一些常用的符号。如图3
     
    9             代表一个数字字符
     
    0                           在指定的位置显示前导0或后置0
     
    $             美元货币符号
     
    B             显示一个空,如果是0的话
     
    MI            显示负号,如果小于0的话
     
    ,                     显示千分位分隔符
     
    .                     显示小数点
     
    G             和,一样,显示千分位分组符号
     
    L              显示本地区域的货币符号
     
    熟悉oracle的朋友都知道,SQL PLUS是一个重要的和ORACLE打交道的工具。
    SQL PLUS本身有很多命令,可以帮助我们做很多事情,
    包括产生一些规格化的报表、提供人机交互等等。下面,我就简单地说明一下,
    供大家参考:
    /***********************************************************************/
    一 帮助命令
     
       HELP可以帮助我们,查找SQL PLUS每个命令的用法
     
    举例:
     
    SQL> help accept
     
     
     
    ACCEPT
     
    ------
     
     
     
    Reads a line of input and stores it in a given user variable.
     
     
     
    ACC[EPT] variable [NUM[BER] | CHAR | DATE] [FOR[MAT] format]
     
       [DEF[AULT] default] [PROMPT text | NOPR[OMPT]] [HIDE]
     
     
     
    二  SQLPLUS的人机交互命令
     
    在SQLPLUS里可以接受用户的输入,最常用的命令有:
     
    (1)   ACCEPT
     
    接受整行的数据。
     
    语法:ACC[EPT] variable [NUM[BER]|CHAR|DATE] [FOR[MAT] format]
        [DEF[AULT] default] [PROMPT text|NOPR[OMPT]] [HIDE]
    举例说明:
     
    角本1.sql,查出工资大于输入金额的雇员。
     
    SET FEEDBACK OFF
     
    SET PAUSE OFF
     
    ACCEPT sal NUMBER PROMPT 'Please input salary(weekly): '
     
    select employee_id,last_name,first_name,salary from employee
     
    where salary>&sal;
     
    在SQLPLUS 中运行
     
    SQL> @c:\1.sql
     
    Please input salary(weekly): 1000
     
    old   2: where salary>&sal
     
    new   2: where salary>      1000
     
     
     
    EMPLOYEE_ID LAST_NAME    FIRST_NAME          SALARY
     
    ----------------- ------------------- ----------------------------- ----------
     
           7499 ALLEN           KEVIN                 1600
     
           7505 DOYLE           JEAN                  2850
     
           7506 DENNIS          LYNN                  2750
     
           7507 BAKER           LESLIE                2200
     
           7521 WARD            CYNTHIA               1250
     
           7555 PETERS          DANIEL                1250
     
           7557 SHAW            KAREN                 1250
     
           7560 DUNCAN          SARAH                 1250
     
           7564 LANGE           GREGORY               1250
     
           7566 JONES           TERRY                 2975
     
    7569 ALBERTS         CHRIS                 3000
     
    注:
     
    ① ACCEPT接受一行的输入,并且把输入的数据根据指定按照指定的类型存放到变量
    (如不存在,自动创建一个)中。
     
    ② FOMRAT用于制定输入的数据格式,如数字可以指定’999.99’,字符可以指定长度’A10’
     
    ③ 如果类型是CHAR,长度最大240。
     
     
     
    (2)   PROMPT
     
    输出提示信息。
     
    语法:PRO[MPT] [text]
     
    举例:
     
    SQL> PROMPT Hello,world
     
    Hello,world
     
    (3)   PAUSE
     
    输出一行信息,并等待用户输入回车。
     
    语法:PAU[SE] [text]
    举例:
     
    SQL> PAUSE Please press [RETURN]
     
    Please press [RETURN]
     
     
     
    SQL>
     
     
     
    三 编辑命令
     
    通过SQL PLUS发送的最后一次SQL语句都会保存在SQL PLUS的一个数据缓冲区内,
    而SQLPLUS命令不包括在内可以通过编辑命令进行编辑。
     
    (1)   /
     
    重新执行一下sql 语句。
     
    (2)   APPEND
     
    在命令缓冲区内,追加字符。
     
    举例:
     
    SQL> select * from tab;
     
    ….
     
    SQL> A  WHERE tabtype='VIEW'
     
      1* select * from tabwhere tabtype='VIEW'
     
    SQL> /
     
     
     
    TNAME                          TABTYPE  CLUSTERID
     
    ------------------------------ ------- ----------
     
    PLSQL_PROFILER_GRAND_TOTAL     VIEW
     
    PLSQL_PROFILER_LINES_CROSS_RUN VIEW
     
    PLSQL_PROFILER_NOTEXEC_LINES   VIEW
     
    PLSQL_PROFILER_UNITS_CROSS_RUN VIEW
     
    SALES                          VIEW
     
     
     
    (3)   LIST或;
     
    列出缓冲区内的内容,list可以列出某行的内容,而;则是所有的。
     
    举例:
     
    SQL> ;
     
      1  select * from tab WHERE tabtype='VIEW'
     
      2* ORDER BY tname
     
    SQL> l 2
     
      2* ORDER BY tname
     
    (4)   INPUT
     
    增加一行内容
     
    举例:
     
    SQL> i  ORDER BY tname
     
    SQL> l
     
      1  select * from tab WHERE tabtype='VIEW'
     
      2* ORDER BY tname
     
    (5)   CHANGE
     
    把当前行的第一个艘索到的内容替换新的内容,
     
    语法:C[HANGE] sepchar old [sepchar [new[sepchar]]]
     
    举例:
     
    SQL> l
     
      1* select * from employee where salary>1000 and salary<2000
     
    SQL> c/salary/sal
     
      1* select * from employee where sal>1000 and salary<2000
     
    注意,当缓冲区有两行的时候,用C替换的是最后一行里的内容。
     
    (6)   Edit
     
    在指定的文本编辑器里,编辑缓冲区的内容。Windows上,缺省是NOTEPAD。
     
    (7)   SPOOL
     
    把输出结果,指定到一个文件中,有点像DOS命令下的>
     
    SPO[OL] [file_name[.ext] | OFF | OUT]
     
    SQL> spool c:\1.txt
     
    SQL> select * from tab;
     
    SQL> spool off
     
     
     
    四 执行命令
     
    (1)   @
     
    载入角本,运行。
     
    举例:
     
    SQL>@C:\1.SQL
     
    (2)   EXECUTE
     
    运行PL/SQL过程和程序包。
    /***************************************************************/
    五 报表制作命令
     
    报表制作命令是最重要的SQL*PLUS命令,也是DBA经常用到的。下面,就让我简单地说明一下。
     
    (1)    TTITLE命令
     
    放置一个报表的标题。
     
    语法:
     
    TTITLE
     
    ------
     
     
     
    Places and formats a title at the top of each report page.
     
    Enter TTITLE with no clause to list its current definition.
     
     
     
    The old form of TTITLE is used if only a single word or
     
    a string in quotes follows the TTITLE command.
     
     
     
    TTI[TLE] [printspec [text|variable] ...] | [ON|OFF]
     
     
     
    where printspec is one or more of the following clauses:
     
     
     
        COL n          LE[FT]        BOLD
     
        S[KIP] [n]     CE[NTER]      FORMAT text
     
    TAB n          R[IGHT]
     
    主要参数的说明:
     
    ¨         报表标题的显示的位置,有LEFT,CENTER决定
     
    ¨         还可以使用用户的变量(内容有系统来维护),如SQL.PNO页号, SQL.LNO行号等等
     
    ¨         COL[N] 就是在第几个字符位置开始显示标题。
     
     
     
    (2)    COLUMN命令
     
    这个命令主要用途,是规范查询的结果的输出格式。
    输出格式包括了数字也可以指定显示的宽度。COLUMN设置后,一直保持有效。
    除非,你重新使用COLUMN设置该列或者用COLUMN <column name> CLEAR。
     
    语法:
     
    COLUMN
     
    ------
     
     
     
    Specifies display attributes for a given column, such as:
     
        - column heading text
     
        - column heading alignment
     
        - NUMBER data format
     
        - column data wrapping
     
     
     
    Also lists the current display attributes for a single column
     
    or all columns.
     
     
     
    COL[UMN] [{column | expr} [option...] ]
     
     
     
    where option is one of the following clauses:
     
        ALI[AS] alias
     
        CLE[AR]
     
        ENTMAP {ON|OFF}
     
        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]
     
     
     
     
     
    /*********************************************************************/
    关于其他参数的提示
     
    Justify主要规定了列显示内容的对齐方式。Left ,right,center。
     
    Like指定该列的显示参照某个其他列的显示方法。如:COLUMN COMM LIKE SAL
     
    NEW LINE 换行显示这个列的内容
     
    NULL text  如果是null,显示一个字符串,相当于ISNULL函数。
    (3)   Break命令
     
    利用Break你可以打印出报表需要的一些内容,如小计,重复的列值不显示,
    或者每个分组插入一个空行等等。
     
    清除break设置,clear breaks。
     
    语法:
     
    BREAK
     
    -----
     
     
     
    Specifies where and how to make format changes to a report.
     
     
     
    BRE[AK] [ON report_element [action [action]]] ...
     
     
     
    where report_element has the following syntax:
     
         {column | expression | ROW | REPORT}
     
     
     
    and where action has the following syntax:
     
    [SKI[P] n | [SKI[P]] PAGE] [NODUP[LICATES] | DUP[LICATES]]
     
    说明如下:
     
    sql>break on deptno
     
    得到的结果如图4
    /*********************************************************************/
    图4
     
    通过对某个列设置break命令,我们去掉了重复显示deptno的值。
    请仔细对比一下没有break的情况。这种用法称为break column的用法。
    BREAK命令中的列应该要出现在SQL语句的order by中,
    如果order by中有多个列,也有多个列的break用法。
     
    Break参数的说明
     
    ¨         Skip[n],在每个分组值出现前,自动插入n个空行
     
    ¨         Skip page, 在每个分组值出现前,自动换页
     
    ¨         BREAK ON ROW SKIP[n],每一行后面插入n个空行。
     
    ¨         Nodup重复的显示空,dup重复的也显示。
     
    BREAK好比定义了一个事件,当值发生了变化后,可以对查询的结果执行一个特定的操作。
    BREAK和COMPUTE命令一起用,就可以产生小计等报表效果。
     
    /*************************************************************************/
    图5
     
     
     
    (4)  COMPUTE命令
     
    在结果的最后显示一行统计行。如果有多个COMPUTE,那么只有最后一个COMPUTE才起作用。Clear computes删除所有设定的compute。
     
    语法:
     
    COMPUTE
     
    -------
     
     
     
    Calculates and prints summary lines, using various standard
     
    computations, on subsets of selected rows. It also lists all
     
    COMPUTE definitions.
     
     
     
    COMP[UTE] [function [LAB[EL] text] ...
     
       OF {expr|column|alias} ...
     
       ON {expr|column|alias|REPORT|ROW} ...]
     
     
     
    COMPUTE和BREAK一起使用的。没有BREAK语句的COMPUTE没有任何效果。一般的用法如下:
     
    BREAK ON break_column
     
    COMPUTE function LABEL label_name OF column column column
     
    ... ON break_column
     
    COMPUTE执行的计算操作主要有:
     
    SUM
    Computes the sum of the values in the column.
     
    MINIMUM
    Computes the minimum value in the column.
     
    MAXIMUM
    Computes the maximum value in the column.
     
    AVG
    Computes the average of the values in the column.
     
    STD
    Computes the standard deviation of the values in the column.
     
    VARIANCE
    Computes the variance of the values in the column.
     
    COUNT
    Computes the number of non-null values in the column.
     
    NUMBER
    Computes the number of rows in the column.
    /*********************************************************************/
     
  • 相关阅读:
    FastJson序列化枚举类
    优雅计时StopWatch
    spark算子之aggregateByKey
    scala系列列表
    iOS开发证书不受信任
    .NET Core 中的鉴权授权正确方式
    设置双击直接打开.ipynb文件
    Ubuntu18添加开机启动项
    iOS ObjectC 笔记(二)GCD
    iOS VideoToolBox decoder解码失败(12909和12911)问题解决(二)
  • 原文地址:https://www.cnblogs.com/quanweiru/p/2959583.html
Copyright © 2011-2022 走看看