a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 155|回复: 2

[综合] Oraclesqlplus常用命令总结

[复制链接]
发表于 2012-8-4 13:54:49 | 显示全部楼层 |阅读模式
 Oracle的sql*plus是与oracle进行交互的客户端工具。在sql*plus中,可以运行sql*plus命令与sql*plus语句。   我们通常所说的DML、DDL、DCL语句都是sql*plus语句,它们执行完后,都可以保存在一个被称为sql buffer的内存区域中,并且只能保存一条最近执行的sql语句,我们可以对保存在sql buffer中的sql 语句进行修改,然后再次执行,sql*plus一般都与数据库打交道。
9 B: q: A1 j/ ~) w  除了sql*plus语句,在sql*plus中执行的其它语句我们称之为sql*plus命令。它们执行完后,不保存在sql buffer的内存区域中,它们一般用来对输出的结果进行格式化显示,以便于制作报表。
- q  {- H) E) b- W% A; ~" _$ Z. v  1. 执行一个SQL脚本文件SQL>start file_name SQL>@ file_name我们可以将多条sql语句保存在一个文本文件中,这样当要执行这个文件中的所有的sql语句时,用上面的任一命令即可,这类似于dos中的批处理。+ ]% W$ x2 R7 o, \; m
  2. 对当前的输入进行编辑SQL>edit
1 R6 R0 w2 ~3 M* D0 S! r8 h# @  3. 重新运行上一次运行的sql语句SQL>/
% f0 e6 V; d7 X8 _& h. a  4. 将显示的内容输出到指定文件SQL> SPOOL file_name在屏幕上的所有内容都包含在该文件中,包括你输入的sql语句。
8 J- U0 Z; S! Q  5. 关闭spool输出SQL> SPOOL OFF只有关闭spool输出,才会在输出文件中看到输出的内容。
- y, y0 Z& C# m3 `  y8 w" I. c( `% @  6.显示一个表的结构SQL> desc table_name, A+ {  `7 j! M3 }, g  u: i; X  U
  7. COL命令: 主要格式化列的显示形式。7 b# E* T" d! B; b) E, Q+ R
  SQL> help col COLUMN
# ]8 H( W5 N- m& v* O ------* D- S3 J) G% S% l
  Specifies display attributes for a given column, such as:- text for the column heading - alignment for the column heading - format for NUMBER data - wrapping of column data Also lists the current display attributes for a single column or all columns.  I6 b7 j* H: S* d* ?+ {; w
  COL[UMN] [{column | expr} [option ……] ]8 V  Z- L# W0 Y+ N8 x- N
  where option represents 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] | 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]. m  k! ]! M) i' m
  7.1. 改变缺省的列标题 :COLUMN column_name HEADING column_heading SQL> select * from scott.dept;DEPTNO DNAME          LOC+ U2 e  M& d; }+ x% a" V
---------- -------------- -------------
3 ~6 B5 r5 _0 I/ v4 C9 \, q  10 ACCOUNTING     NEW YORK SQL> col loc heading location SQL> select * from scott.dept;DEPTNO DNAME          location
! F8 L4 P5 K2 h---------- -------------- -------------
9 E" W: T) \: U) _. k+ {: ^8 f( G/ M  10 ACCOUNTING     NEW YORK
1 k) ~5 x# B% V' }  7.2. 将列名ENAME改为新列名EMPLOYEE NAME并将新列名放在两行上:SQL> select empno,ename from scott.emp where rownum=1;EMPNO EName
0 S- [; h; k) A3 _---------- ----------
# V; v' C3 m0 Y2 C1 l" V  7369 SMITH SQL> COLUMN ENAME HEADING Employee|Name SQL> select empno,ename from scott.emp where rownum=1;2 m5 l8 B. \  g
  Employee EMPNO Name      —— 注意,此处变成了2行
1 Q$ |2 \; K9 x: m+ z0 v4 w----------  ----------( s7 w; z( s* M0 X- e9 [: D7 _
  7369  SMITH6 V; S, K% q2 C" i: _
  7.3. 改变列的显示长度:FOR[MAT] format Sql> col ename format a40$ R6 Y1 l1 X  W4 Z+ ^9 S4 K0 V
  7.4. 设置列标题的对齐方式JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]} SQL> select * from scott.dept;
* `4 c( M+ W7 C; {) b' Y  DEPTNO DNAME          location
& X0 ~* H& x0 r& P---------- -------------- -------------* N4 ^# y8 A9 v* G3 _0 a
  10 ACCOUNTING     NEW YORK SQL> col dname justify right SQL> / DEPTNO     DNAME location
2 g( @6 p& V4 C* ^---------- -------------- -------------, i7 V/ h" ^( ~) G7 ^$ A
  10 ACCOUNTING     NEW YORK对于NUMBER型的列,列标题缺省在右边,其它类型的列标题缺省在左边% Y, d- Y7 l. F4 S
  7.5 . 不让一个列显示在屏幕上NOPRI[NT]|PRI[NT] SQL> select * from scott.dept;DEPTNO   DNAME location3 X3 h! V7 e% o- t( m% u4 a
---------- -------------- -------------
6 `6 x3 k# E8 t- Z! D! C6 f  10 ACCOUNTING     NEW YORK SQL> col dname noprint;SQL> / DEPTNO location
% c7 B; c* J2 o) |, Y---------- -------------: s5 }  W1 l: L
  10 NEW YORK1 t& v0 I4 ?- d0 M$ l  Z, P
  7.6. 格式化NUMBER类型列的显示:SQL> select sal from scott.emp where rownum=1;SAL# O+ y5 H. S! o8 ^
----------! z  T3 {  Z7 Y0 K% h$ O
  800 SQL> col sal format $999.990 SQL> / SAL
9 C1 ]3 d0 t, [. k" U---------转自:考试网 - [Examw.Com]
# z2 o8 e. n! N3 h3 [4 P5 ~- J8 I6 R  $800.000 7.7. 显示列值时,如果列值为NULL值,用text值代替NULL值COMM NUL[L] text SQL>COL COMM NUL[L] text 7.8. 设置一个列的回绕方式 :WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED] SQL> create table dmm(test varchar2(100));表已创建。
5 K5 r( a/ T2 b' A; U  SQL> insert into dmm values('I am DBA');已创建 1 行。
* H+ l, K. U* t- K+ s  SQL> select * from dmm;TEST" W( [1 N7 [- B7 X+ g
-------------------
回复

使用道具 举报

 楼主| 发表于 2012-8-4 13:54:50 | 显示全部楼层

Oraclesqlplus常用命令总结

 I am DBA SQL> col test format a2 SQL> / TE——I SQL> col test wrapped SQL> / TE——I am D BA SQL> col test word_wrapped SQL> / TE——I am DB A 7.9 . 显示列的当前的显示属性值SQL> COLUMN column_name   7.10. 将所有列的显示属性设为缺省值SQL> CLEAR COLUMNS3 |! A7 `2 c3 R9 T" P+ q4 D$ W9 ?
  8. 屏蔽掉一个列中显示的相同的值BREAK ON break_column SQL> BREAK ON DEPTNO SQL> SELECT DEPTNO, ENAME, SAL FROM scott.EMP WHERE SAL < 2500 9. 在上面屏蔽掉一个列中显示的相同的值的显示中,每当列值变化时在值变化之前插入n个空行。: M3 z4 u" c- L( s% S
  BREAK ON break_column SKIP n SQL> BREAK ON DEPTNO SKIP 1 SQL> / DEPTNO ENAME SAL
- q0 Y0 i0 r  L6 K. R3 J8 @---------- ----------- ---------
5 B5 R' `) R9 A+ b  u/ c' U/ A  10 CLARK 2450 MILLER 1300 20 SMITH 800 ADAMS 1100
2 p1 N% }( t& b: f: A( k5 W3 R, V2 E  10. 显示对BREAK的设置SQL> BREAK
  {% E3 u1 r+ p* c. @( R9 H  11. 删除 break的设置SQL> CLEAR BREAKS+ Z. Z; b2 r" M7 g. V
  12. Set 命令:SQL> help set SET——Sets a system variable to alter the SQL*Plus environment settings for your current session. For example, to:-   set the display width for data -   customize HTML formatting -   enable or disable printing of column headings -   set the number of lines per page In iSQL*Plus, you can also use the Preferences screen to set system variables.
! e7 C' s. H1 |  SET system_variable value where system_variable and value represent one of the following clauses:
# D5 T& I  O, W) c3 ^4 V* |) Y  APPI[NFO]{OFF|ON|text}                   NUM[WIDTH] {10|n} ARRAY[SIZE] {15|n}                       PAGES[IZE] {14|n} AUTO[COMMIT] {OFF|ON|IMM[EDIATE]|n}      PAU[SE] {OFF|ON|text} AUTOP[RINT] {OFF|ON}                     RECSEP {WR[APPED]|EA[CH]|OFF} AUTORECOVERY {OFF|ON}                    RECSEPCHAR {_|c} AUTOT[RACE] {OFF|ON|TRACE[ONLY]}         SERVEROUT[PUT] {ON|OFF} [EXP[LAIN]] [STAT[ISTICS]]               [SIZE {n | UNLIMITED}] [FOR[MAT] BLO[CKTERMINATOR] {.|c|ON|OFF}             {WRA[PPED] | CMDS[EP] {;|c|OFF|ON}                       WOR[D_WRAPPED] | COLSEP {_|text}                             TRU[NCATED]}] CON[CAT] {.|c|ON|OFF}                   *SHIFT[INOUT] {VIS[IBLE] | COPYC[OMMIT] {0|n}                         INV[ISIBLE]} COPYTYPECHECK {ON|OFF}                  *SHOW[MODE] {OFF|ON} DEF[INE] {&|c|ON|OFF}                   *SQLBL[ANKLINES] {OFF|ON} DESCRIBE [DEPTH {1|n|ALL}]               SQLC[ASE] {MIX[ED] | [LINENUM {OFF|ON}] [INDENT {OFF|ON}]     LO[WER] | UP[PER]} ECHO {OFF|ON}                           *SQLCO[NTINUE] {> | text} *EDITF[ILE] file_name[.ext]              *SQLN[UMBER] {ON|OFF} EMB[EDDED] {OFF|ON}                      SQLPLUSCOMPAT[IBILITY] {x.y[.z]} ESC[APE] {/|c|OFF|ON}                   *SQLPRE[FIX] {#|c} FEED[BACK] {6|n|ON|OFF}                 *SQLP[ROMPT] {SQL>|text} FLAGGER {OFF|ENTRY|INTERMED[IATE]|FULL}  SQLT[ERMINATOR] {;|c|ON|OFF} *FLU[SH] {ON|OFF}                        *SUF[FIX] {SQL|text} HEA[DING] {ON|OFF}                      *TAB {ON|OFF} HEADS[EP] {||c|ON|OFF}                  *TERM[OUT] {ON|OFF} INSTANCE [instance_path|LOCAL]          *TI[ME] {OFF|ON} LIN[ESIZE] {80|n} ({150|n} iSQL*Plus)    TIMI[NG] {OFF|ON} LOBOF[FSET] {1|n}                       *TRIM[OUT] {ON|OFF} LOGSOURCE [pathname]                    *TRIMS[POOL] {OFF|ON} LONG {80|n}                              UND[ERLINE] {-|c|ON|OFF} LONGC[HUNKSIZE] {80|n}                   VER[IFY] {ON|OFF} MARK[UP] HTML [OFF|ON]                   WRA[P] {ON|OFF} [HEAD text] [BODY text] [TABLE text]   XQUERY {BASEURI text| [ENTMAP {ON|OFF}]                        ORDERING{UNORDERED| [SPOOL {OFF|ON}]                                  ORDERED|DEFAULT}| [PRE[FORMAT] {OFF|ON}]                   NODE{BYVALUE|BYREFERENCE| NEWP[AGE] {1|n|NONE}                            DEFAULT}| NULL text                                  CONTEXT text} NUMF[ORMAT] format+ r9 V7 @1 C. w3 k" Q' \
  An asterisk (*) indicates the SET option is not supported in iSQL*Plus.# }7 R+ [7 J7 |% [1 E9 |
  12.1. 设置当前session是否对修改的数据进行自动提交SQL>SET AUTO[COMMIT] {ON|OFF|IMM[EDIATE]| n}! a( G, r4 S* }+ Q2 W) y
  12.2.在用start命令执行一个sql脚本时,是否显示脚本中正在执行的SQL语句SQL> SET ECHO {ON|OFF}
& W* v5 \# x2 e; i  12.3. 是否显示当前sql语句查询或修改的行数SQL> SET FEED[BACK] {6|n|ON|OFF}默认只有结果大于6行时才显示结果的行数。如果set feedback 1 ,则不管查询到多少行都返回。当为off 时,一律不显示查询的行数/ a" ?/ a1 c4 v* R* {2 A
  12.4. 是否显示列标题SQL> SET HEA[DING] {ON|OFF}当set heading off 时,在每页的上面不显示列标题,而是以空白行代替+ d# {* x* J- N
  12.5.设置一行可以容纳的字符数SQL> SET LIN[ESIZE] {80|n}如果一行的输出内容大于设置的一行可容纳的字符数,则折行显示。- ^8 g( [, ?. j5 C, ?& ]7 P
  12.6.设置页与页之间的分隔SQL> SET NEWP[AGE] {1|n|NONE}当set newpage 0 时,会在每页的开头有一个小的黑方框。3 o4 h% i) G' K+ |9 y1 R1 G2 X. ]
  当set newpage n 时,会在页和页之间隔着n个空行。
( E0 @4 T% Q2 s3 {  当set newpage none 时,会在页和页之间没有任何间隔。
2 }; U0 `, F. ]  12.7 .显示时,用text值代替NULL值SQL> SET NULL text
" w5 V6 U# i+ m. P  12.8.设置一页有多少行数SQL> SET PAGES[IZE] {24|n}如果设为0,则所有的输出内容为一页并且不显示列标题
3 x  i) y4 w9 A  12.9.是否显示用DBMS_OUTPUT.PUT_LINE包进行输出的信息。3 X* M5 r. r4 H# E4 g+ `. D
  SQL> SET SERVEROUT[PUT] {ON|OFF}在编写存储过程时,我们有时会用dbms_output.put_line将必要的信息输出,以便对存储过程进行调试,只有将serveroutput变量设为on后,信息才能显示在屏幕上。 dbms_output.put_line会"吃掉"最前面的空格?
, d3 H$ Z& [' T' n6 f2 Y* f: N  在set serveroutput on后加上format wrapped参数!& O- x. d- P4 O
  12.10. 当SQL语句的长度大于LINESIZE时,是否在显示时截取SQL语句。
' y$ U! x" e- D- F- _( z1 o& n  SQL> SET WRA[P] {ON|OFF}当输出的行的长度大于设置的行的长度时(用set linesize n命令设置),当set wrap on时,输出行的多于的字符会另起一行显示,否则,会将输出行的多于字符切除,不予显示。' M: L- \4 [2 t" P0 W/ Z
  12.11 .是否在屏幕上显示输出的内容,主要用与SPOOL结合使用。
/ m5 A9 B5 \: ?: Q, f  SQL> SET TERM[OUT] {ON|OFF}在用spool命令将一个大表中的内容输出到一个文件中时,将内容输出在屏幕上会耗费大量的时间,设置set termspool off后,则输出的内容只会保存在输出文件中,不会显示在屏幕上,极大的提高了spool的速度。6 I- _, x& M9 x  _  B5 B5 n( p4 A
  12.12 .将SPOOL输出中每行后面多余的空格去掉SQL> SET TRIMS[OUT] {ON|OFF}
5 \: ?# r! n" G. b9 _  12.13 显示每个sql语句花费的执行时间set TIMING {ON|OFF}
) s0 @( H' K! t7 G  ?4 X  12.14 SET SQLBLANKLINES ON Sql*plus中, 不允许sql语句中间有空行, 这在从其它地方拷贝脚本到sql*plus中执行时很麻烦。 原因是sqlplus遇到空行就认为是语句结束了。  i9 F, d+ d# _' F/ X7 h
  其实要改变这种现象, 只要使用SQLBLANKLINES参数就可以了SET SQLBLANKLINES ON" ^/ e# d# h; s4 u7 j2 V/ j
  关于SET 命令的一些简单的示例1.set verify on/off当在sqlplus中运行的sql语句中有替代变量(以&或&&打头)的时候,set verify(或ver) on/off可以设置是否显示替代变量被替代前后的语句。. J: X+ |6 c" x9 y0 m+ k! o' z, N$ O
  如:SQL> set ver on;SQL> select * from dual where 1=&var;Enter value for var: 1 old 1: select * from dual where 1=&var new 1: select * from dual where 1=1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 13:54:51 | 显示全部楼层

Oraclesqlplus常用命令总结

 DU——X   而如果设为off,则显示如下:SQL> set ver off;SQL> select * from dual where 1=&var;Enter value for var: 1
/ D5 m5 N/ B! ^) h6 @6 j  DU——X使用以&和&&开头的替代变量的前提是set define on;(不过这是缺省状态)。
9 @+ m( x7 f3 a6 E& B3 P  n  2. set feedback on/off回显本次sql命令处理的记录条数,缺省为on SQL> select * from test where id = 1;NAME               ID
- j% b/ Q" z0 f2 v% \$ r: Z---------- ----------
& e( S* S7 p+ z8 R* z, }  a                   1 b                   1已选择2行。
! G8 V6 Y, Q! W& b7 c) m  SQL> set feedback off;SQL> / NAME               ID
6 n) q. a4 Z' p# _1 Y0 J* p; l---------- ----------
" f; Y$ W( V( J  a                   1 b                   1 SQL> set feedback on;SQL> / NAME               ID
5 t- j5 }. N/ `- ?& ~6 d+ N) Q---------- ----------5 }$ C3 c" V8 ]6 R, n
  a                   1 b                   1已选择2行。2 m; T5 n" p6 P" q  l, N
  3. set timing on SQL> set timing on SQL> select * from v$version;7 R$ ]" f0 Z  K/ x% V4 O
  BANNER, ]7 O  j1 r4 W' w. L2 ]* P
----------------------------------------------------------------# i. I& Z$ d* M3 R6 F# `
  Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod PL/SQL Release 10.2.0.1.0 - Production CORE    10.2.0.1.0      Production TNS for 32-bit Windows: Version 10.2.0.1.0 - Production NLSRTL Version 10.2.0.1.0 - Production已用时间:  00: 00: 00.008 B0 B$ K+ A) f  E% ?
  14.修改sql buffer中的当前行中,第一个出现的字符串C[HANGE] /old_value/new_value SQL> l 1* select * from dept SQL> c/dept/emp 1* select * from emp
& y8 C6 H0 f! ^/ q! {  15.编辑sql buffer中的sql语句SQL>EDI[T]
) a5 f* J' G5 F+ G3 J: M  16.显示sql buffer中的sql语句,list n显示sql buffer中的第n行,并使第n行成为当前行L[IST] [n]
; J& m) D- t4 v+ E- V. x* Q  17.在sql buffer的当前行下面加一行或多行I[NPUT]# x, O8 x- n- ^! @/ ?/ |
  18.将指定的文本加到sql buffer的当前行后面A[PPEND]
8 c2 F0 f+ R+ Y4 V  SQL> select deptno,dname from scott.dept;DEPTNO DNAME
2 h0 ]" u# ?# F1 j---------- --------------) |3 y1 D1 E1 G7 v
  10 ACCOUNTING 20 RESEARCH 30 SALES 40 OPERATIONS SQL> l 1* select deptno,dname from scott.deptloc, loc SQL> a , dmm 1* select deptno,dname from scott.deptloc, loc, dmm
) s$ }! X5 ~, [5 {) a" k8 B  19.将sql buffer中的sql语句保存到一个文件中SAVE file_name0 g) ]1 b+ [, r) O' c
  20.将一个文件中的sql语句导入到sql buffer中GET file_name
1 a" K& J  g& I+ K  C: t" k  21.再次执行刚才已经执行的sql语句RUN or /" j6 V# T& p, |6 [. K
  22.执行一个存储过程EXECUTE procedure_name
) K4 `! D- {' k, n  23.在sql*plus中连接到指定的数据库CONNECT user_name/passwd@db_alias
; U& C" X5 I# P/ }+ G6 ~& z  24.设置每个报表的顶部标题TTITLE
# {, |2 ^$ M, ~$ h  {" I5 [0 ^1 f# K  25.设置每个报表的尾部标题BTITLE: X1 ]0 v; J1 ]6 v% T/ J
  26.写一个注释REMARK [text]
% l" L3 H1 N- W9 V" J. o1 n% P1 f  27.将指定的信息或一个空行输出到屏幕上PROMPT [text]3 R# l2 g* Z( W2 c# w" j$ N' M3 j
  28.将执行的过程暂停,等待用户响应后继续执行PAUSE [text] Sql>PAUSE Adjust paper and press RETURN to continue.6 A" @8 _) c% R. b
  29.将一个数据库中的一些数据拷贝到另外一个数据库(如将一个表的数据拷贝到另一个数据库)$ K) ?5 {# Q( r3 R0 `% @) g" [" ]4 \
  COPY {FROM database | TO database } {APPEND|CREATE|INSERT|REPLACE} destination_table [(column, column, column, ……)] USING query sql>COPY FROM SCOTT/TIGER@A TO DAVE/ADMIN@B create emp_temp USING SELECT * FROM EMP
2 Y% y( j2 l0 M) d4 z2 Q  30.不退出sql*plus,在sql*plus中执行一个操作系统命令:HOST Sql> host hostname该命令在windows下可能被支持。% T1 _1 }9 y3 J! N9 W
  31.在sql*plus中,切换到操作系统命令提示符下,运行操作系统命令后,可以再次切换回Linux 下是:!# b' a4 C% Y% q+ R: m! f! f
  Windows 是:$ sql>!
8 I; ]# x% X" T6 w3 [7 @- D  $hostname $exit sql>该命令在windows下不被支持。
  V+ o3 R+ v' t9 c" G* P+ X, ?  32.显示sql*plus命令的帮助HELP Sql>help index; K( ~  R/ b& y3 q2 I7 Y. _" a
  33.显示sql*plus系统变量的值或sql*plus环境变量的值SQL> help show Shows the value of a SQL*Plus system variable, or the current SQL*Plus environment. SHOW SGA requires a DBA privileged login.
% ~$ t: O, {" v5 R$ n  SHO[W] option, K' B+ @4 ^: }# z+ {9 k  k: n6 x' j
  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 | DIMENSION | JAVA CLASS} [schema.]name] LNO PARAMETERS [parameter_name] PNO RECYC[LEBIN] [original_name] REL[EASE] REPF[OOTER] REPH[EADER] SGA SPOO[L] SQLCODE TT[ITLE] USER
# P! L8 k4 Z8 y& n4 g  SHOW SPOOL is not available in iSQL*Plus
9 f/ b- |; u, U" x1 Y2 _/ G  13.1 . 显示当前环境变量的值:Show all
& v! z# L" Q! Z$ P  A3 s) }( M  L  13.2 . 显示当前在创建函数、存储过程、触发器、包等对象的错误信息Show error当创建一个函数、存储过程等出错时,变可以用该命令查看在那个地方出错及相应的出错信息,进行修改后再次进行编译。
% o/ Q2 S8 y- a( o6 b# E  13.3 . 显示初始化参数的值:show PARAMETERS [parameter_name]
5 f" K( b7 T2 g  13.4 . 显示数据库的版本:show REL[EASE], h2 ]* k9 c4 X: G- |& U9 r6 j. j/ J
  13.5 . 显示SGA的大小show SGA
, ]1 d2 }& F# ~/ _5 G  13.6. 显示当前的用户名show user
3 v: H7 b# k2 C/ c  14.使用SQL*PLUS动态生成批量脚本将spool与select命令结合起来使用,可以生成一个脚本,脚本中包含有可以批量执行某一任务的语句。( E6 J2 J) B9 J0 d6 M
  例1:生成一个脚本,删除SCOTT用户下的所有的表:a. 创建gen_drop_table.sql文件,包含如下语句:SPOOL d:/drop_table.sql SELECT 'DROP TABLE '|| table_name ||';' FROM user_tables;SPOOL OFF
$ h8 C9 A& n/ G! E1 j- Q  b. 以SCOTT用户登录数据库:SQLPLUS > @ d:/drop_table.sql c. 在c盘根目录下会生成文件drop_table.sql文件,包含删除所有表的语句,如下所示:SQL>SELECT 'DROP TABLE '|| table_name ||';' FROM user_tables;'DROPTABLE'||TABLE_NAME||';') l* N7 O. d; ~- @
-----------------------------
: F7 q" z' d7 U1 |) h0 `/ ^  DROP TABLE DEPT;DROP TABLE EMP;DROP TABLE PARENT;DROP TABLE STAT_VENDER_TEMP;DROP TABLE TABLE_FORUM;5 rows selected:SQL> SPOOL OFF. d. 对生成的drop_table.sql文件进行编辑去掉不必要的部分,只留下drop table …语句e. 在scott用户下运行dorp_table.sql文件,删除scott用户下所有的表。SQLPLUS > @ c:dorp_table.sql.
0 W3 E, V" Q' f) h4 g" z6 k  在上面的操作中,在生成的脚本文件中会有多余的字符,如运行的SQL语句,标题,或返回的行数,需要我们编辑该脚本后再运行,给实际的操作带来诸多不便。懒惰是人的本性,这促使我们用更简单的办法来实现上面的任务。3 x/ R4 r, G7 Y
  a. 创建gen_drop_table.sql文件,包含如下语句:set echo off set feedback off set newpage none set pagesize 5000 set linesize 500 set verify off set pagesize 0 set term off set trims on set linesize 600 set heading off set timing off set verify off set numwidth 38 SPOOL c:drop_table.sql SELECT 'DROP TABLE '|| table_name ||';' FROM user_tables;SPOOL OFF b. 以SCOTT用户登录数据库:SQLPLUS > @ ………gen_dorp_table.sql. c. 在c盘根目录下会生成文件drop_table.sql文件,包含删除所有表的语句,如下所示:DROP TABLE DEPT;DROP TABLE EMP;DROP TABLE PARENT;DROP TABLE STAT_VENDER_TEMP;DROP TABLE TABLE_FORUM;
* n( ?; Q$ D9 e4 U  d. 在scott用户下运行dorp_t:able.sql文件,删除scott用户下所有的表。SQLPLUS > @ c:dorp_table.sql8 _! _; L$ \  h* D+ j
  例2.将一个表中的数据导出生成一个文本文件,列与列之间以“,”隔开:set echo off set feedback off set newpage none set pagesize 5000 set linesize 500 set verify off set pagesize 0 set term off set trims on set linesize 600 set heading off set timing off set verify off set numwidth 38 SPOOL c:drop_table.sql select DEPTNO || ',' || DNAME FROM DEPT;SPOOL OFF将上面的内容保存为一个文本文件后,以scott登录,执行该文件后显示结果:10,ACCOUNTING 20,RESEARCH 30,SALES 40,OPERATIONS通过上面的两个例子,我们可以将:set echo off set feedback off set newpage none set pagesize 5000 set linesize 500 set verify off set pagesize 0 set term off set trims on set linesize 600 set heading off set timing off set verify off set numwidth 38 SPOOL c:/具体的文件名你要运行的SQL语句SPOOL OFF.作为一个模版,只要将必要的语句假如这个模版就可以了。& \0 M: B, C5 d: c0 T& L
  在oracle的较新版本中,还可以用set colsep命令来实现上面的功能:SQL> set colsep ,SQL> select * from dept;10,ACCOUNTING ,NEW YORK 20,RESEARCH ,DALLAS 30,SALES ,CHICAGO 40,OPERATIONS ,BOSTON 35,aa ,bb
' j, Q( ~+ w6 u7 }" r* \& t( B3 h  例3.动态生成spool命令所需的文件名。! g. t7 ~" o/ @7 W4 q) X5 i
  在我们上面的例子中,spool命令所需要的文件名都是固定的。有时我们需要每天spool一次,并且每次spool的文件名都不相同,如文件名包含当天的日期,该如何实现呢?
! Q7 h0 Q) R7 G  `  column dat1 new_value filename;select to_char(sysdate,'yyyymmddhh24mi') dat1 from dual;spool c:&&filename……txt select * from dept;spool off;. K  d1 f4 p; ]. u$ }: r# e
  15.如何从脚本文件中得到WINDOWS环境变量的值:在windos中:spool c:/temp%ORACLE_SID%.txt select * from dept;……2 f! U7 c- ~& ?, l0 w6 H& O
  spool off在上面的例子中,通过%ORACLE_SID%的方式引用环境变量ORACLE_SID的值,如果ORACLE_SID的值为orcl,则生成的spool文件名为:orcl.txt.在UNIX中:spool temp$ORACLE_SID.txt select * from dept;……
* w" E7 a6 H! I5 E% d' Z  spool off在上面的例子中,通过$ORACLE_SID的方式引用环境变量ORACLE_SID的值,如果ORACLE_SID的值为orcl,则生成的spool文件名为:orcl.txt.
4 I" W" M6 f+ A# T' u  16.如何指定缺省的编辑脚本的目录:在sql*plus中,可以用save命令,将上一条执行的sql语句保存到一个文件中,但是如何设置该文件的缺省目录呢?; N3 @/ g  E: i+ R( x
  通过SQL> set editfile c:/temp/file.sql 命令,可以设置其缺省目录为c:/tmp,缺省文件名为file.sql.  s& E) Y& N! [4 [
  17.如何除去表中相同的行:找到相同的行:SELECT * FROM dept a WHERE ROWID (SELECT MAX(ROWID)
0 h7 S; @) o0 g( ^& v  FROM dept b WHERE a.deptno = b.deptno AND a.dname = b.dname—— Make sure all columns are compared AND a.loc = b.loc);注释:如果只找deptno列相同的行,上面的查询可以改为:SELECT * FROM dept a WHERE ROWID (SELECT MAX(ROWID)7 X8 S3 J1 t( i: g
  FROM dept b WHERE a.deptno = b.deptno)
4 @2 M) ^* H: |; \( F  删除相同的行:DELETE FROM dept a WHERE ROWID (SELECT MAX(ROWID FROM dept b WHERE a.deptno = b.deptno AND a.dname = b.dname—— Make sure all columns are compared AND a.loc = b.loc);注意:上面并不删除列值为null的行。' ~2 g. n0 R8 E6 d/ _! Z
  18.如何向数据库中插入两个单引号(‘’):Insert inot dept values(35,‘aa’‘’‘bb’,‘a’‘b’);。: R! k+ T4 z% K. v- ~$ H  x
  在插入时,用两个‘表示一个’。
6 s! R$ [  _3 U- P! b/ ^  19.如何设置sql*plus的搜寻路径,这样在用@命令时,就不用输入文件的全路径。% f4 p+ c* d+ h/ M, q
  设置SQLPATH环境变量。
; a+ t+ h5 I; B! e% S: v2 \1 r  如:SQLPATH = C:/ORANTDBS;C:/MYSCRIPTS( N( t  L8 q: l. ~( \6 y! |
  20.@与@@的区别是什么?
# J" W  |& ?% @( n# b+ s& ]' E  @等于start命令,用来运行一个SQL脚本文件。0 Q4 e, I) X7 O- [) Z( [0 S6 c; c
  @命令调用当前目录下的,或指定全路径,或可以通过SQLPATH环境变量搜寻到的脚本文件。
3 I4 D7 _/ p" I% ?1 c% U$ Q# ?. q! N  @@用在脚本文件中,用来指定用@@执行的文件与@@所在的文件在同一目录,而不用指定全路径,也不从SQLPATH环境变量指定的路径中寻找文件,该命令一般用在嵌套脚本文件中。# @) o8 Y; \' b: e
  21.&与&&的区别&用来创建一个临时变量,每当遇到这个临时变量时,都会提示你输入一个值。/ O  s5 ]4 j7 `7 O9 ]# U
  &&用来创建一个持久变量,就像用用define命令或带new_vlaue字句的column命令创建的持久变量一样。当用&&命令引用这个变量时,不会每次遇到该变量就提示用户键入值,而只是在第一次遇到时提示一次。
( z9 I8 S9 n3 \& a$ k% ?- x  如,将下面三行语句存为一个脚本文件,运行该脚本文件,会提示三次,让输入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;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-4-30 05:13 , Processed in 0.262328 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表