Oracle的客戶端工具--sql*plus
2024-08-29 13:35:27
供稿:網(wǎng)友
 
                 Oracle的sql*plus是與oracle進(jìn)行交互的客戶端工具。在sql*plus中,可以運(yùn)行sql*plus命令與sql*plus語句。 
                                                                                               我們通常所說的DML、DDL、DCL語句都是sql*plus語句,它們執(zhí)行完后,都可以保存在一個(gè)被稱為sql buffer的內(nèi)存區(qū)域中,并且只能保存一條最近執(zhí)行的sql語句,我們可以對(duì)保存在sql buffer中的sql 語句進(jìn)行修改,然后再次執(zhí)行,sql*plus一般都與數(shù)據(jù)庫打交道。 
   除了sql*plus語句,在sql*plus中執(zhí)行的其它語句我們稱之為sql*plus命令。它們執(zhí)行完后,不保存在sql buffer的內(nèi)存區(qū)域中,它們一般用來對(duì)輸出的結(jié)果進(jìn)行格式化顯示,以便于制作報(bào)表。 
   下面就介紹一下一些常用的sql*plus命令: 
  
1. 執(zhí)行一個(gè)SQL腳本文件 
SQL>start file_name 
SQL>@ file_name 
我們可以將多條sql語句保存在一個(gè)文本文件中,這樣當(dāng)要執(zhí)行這個(gè)文件中的所有的sql語句時(shí),用上面的任一命令即可,這類似于dos中的批處理。 
  
2. 對(duì)當(dāng)前的輸入進(jìn)行編輯 
SQL>edit 
  
3. 重新運(yùn)行上一次運(yùn)行的sql語句 
SQL>/ 
  
4. 將顯示的內(nèi)容輸出到指定文件 
SQL> SPOOL file_name 
   在屏幕上的所有內(nèi)容都包含在該文件中,包括你輸入的sql語句。 
  
5. 關(guān)閉spool輸出 
SQL> SPOOL OFF 
   只有關(guān)閉spool輸出,才會(huì)在輸出文件中看到輸出的內(nèi)容。 
  
6.顯示一個(gè)表的結(jié)構(gòu) 
SQL> desc table_name 
  
7. COL命令: 
主要格式化列的顯示形式。 
該命令有許多選項(xiàng),具體如下: 
COL[UMN] [{ columneXPR} [ option ...]] 
Option選項(xiàng)可以是如下的子句: 
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 { expralias} 
NEWL[INE] 
NEW_V[ALUE] variable 
NOPRI[NT]PRI[NT] 
NUL[L] text 
OLD_V[ALUE] variable 
ONOFF 
WRA[PPED]WOR[D_WRAPPED]TRU[NCATED] 
  
1). 改變?nèi)笔〉牧袠?biāo)題 
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 ’EmployeeName’ 
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). 設(shè)置列標(biāo)題的對(duì)齊方式 
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 
對(duì)于NUMBER型的列,列標(biāo)題缺省在右邊,其它類型的列標(biāo)題缺省在左邊 
  
  
                         5). 不讓一個(gè)列顯示在屏幕上 
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). 顯示列值時(shí),假如列值為NULL值,用text值代替NULL值 
COMM NUL[L] text 
SQL>COL COMM NUL[L] text 
  
8). 設(shè)置一個(gè)列的回繞方式 
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). 顯示列的當(dāng)前的顯示屬性值 
SQL> COLUMN column_name 
  
10). 將所有列的顯示屬性設(shè)為缺省值 
SQL> CLEAR COLUMNS 
  
8. 屏蔽掉一個(gè)列中顯示的相同的值 
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. 在上面屏蔽掉一個(gè)列中顯示的相同的值的顯示中,每當(dāng)列值變化時(shí)在值變化之前插入n個(gè)空行。 
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. 顯示對(duì)BREAK的設(shè)置 
SQL> BREAK 
  
11. 刪除6、7的設(shè)置 
SQL> CLEAR BREAKS 
  
12. Set 命令: 
該命令包含許多子命令: 
SET system_variable value 
system_variable value 可以是如下的子句之一: 
APPI[NFO]{ONOFFtext} 
ARRAY[SIZE] {15n} 
AUTO[COMMIT]{ONOFFIMM[EDIATE]n} 
AUTOP[RINT] {ONOFF} 
AUTORECOVERY [ONOFF] 
AUTOT[RACE] {ONOFFTRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]] 
BLO[CKTERMINATOR] {.c} 
CMDS[EP] {;cONOFF} 
COLSEP {_text} 
COM[PATIBILITY]{V7V8NATIVE} 
CON[CAT] {.cONOFF} 
COPYC[OMMIT] {0n} 
COPYTYPECHECK {ONOFF} 
DEF[INE] {&cONOFF} 
DESCRIBE [DEPTH {1nALL}][LINENUM {ONOFF}][INDENT {ONOFF}] 
ECHO {ONOFF} 
EDITF[ILE] file_name[.ext] 
EMB[EDDED] {ONOFF} 
ESC[APE] {/cONOFF} 
FEED[BACK] {6nONOFF} 
FLAGGER {OFFENTRY INTERMED[IATE]FULL} 
FLU[SH] {ONOFF} 
HEA[DING] {ONOFF} 
HEADS[EP] {cONOFF} 
INSTANCE [instance_pathLOCAL] 
LIN[ESIZE] {80n} 
LOBOF[FSET] {n1} 
LOGSOURCE [pathname] 
LONG {80n} 
LONGC[HUNKSIZE] {80n} 
MARK[UP] Html [ONOFF] [HEAD text] [BODY text] [ENTMAP {ONOFF}] [SPOOL 
{ONOFF}] [PRE[FORMAT] {ONOFF}] 
NEWP[AGE] {1nNONE} 
NULL text 
NUMF[ORMAT] format 
NUM[WIDTH] {10n} 
PAGES[IZE] {24n} 
PAU[SE] {ONOFFtext} 
RECSEP {WR[APPED]EA[CH]OFF} 
RECSEPCHAR {_c} 
SERVEROUT[PUT] {ONOFF} [SIZE n] [FOR[MAT] {WRA[PPED]WOR[D_ 
WRAPPED]TRU[NCATED]}] 
SHIFT[INOUT] {VIS[IBLE]INV[ISIBLE]} 
SHOW[MODE] {ONOFF} 
SQLBL[ANKLINES] {ONOFF} 
SQLC[ASE] {MIX[ED]LO[WER]UP[PER]} 
SQLCO[NTINUE] {> text} 
SQLN[UMBER] {ONOFF} 
SQLPRE[FIX] {#c} 
SQLP[ROMPT] {SQL>text} 
SQLT[ERMINATOR] {;cONOFF} 
SUF[FIX] {SQLtext} 
TAB {ONOFF} 
TERM[OUT] {ONOFF} 
TI[ME] {ONOFF} 
TIMI[NG] {ONOFF} 
TRIM[OUT] {ONOFF} 
TRIMS[POOL] {ONOFF} 
UND[ERLINE] {-cONOFF} 
VER[IFY] {ONOFF} 
WRA[P] {ONOFF} 
  
  
                         1). 設(shè)置當(dāng)前session是否對(duì)修改的數(shù)據(jù)進(jìn)行自動(dòng)提交 
SQL>SET AUTO[COMMIT] {ONOFFIMM[EDIATE] n} 
  
2).在用start命令執(zhí)行一個(gè)sql腳本時(shí),是否顯示腳本中正在執(zhí)行的SQL語句 
SQL> SET ECHO {ONOFF} 
  
                                                                                            3).是否顯示當(dāng)前sql語句查詢或修改的行數(shù) 
SQL> SET FEED[BACK] {6nONOFF} 
   默認(rèn)只有結(jié)果大于6行時(shí)才顯示結(jié)果的行數(shù)。假如set feedback 1 ,則不管查詢到多少行都返回。當(dāng)為off 時(shí),一律不顯示查詢的行數(shù) 
  
4).是否顯示列標(biāo)題 
SQL> SET HEA[DING] {ONOFF} 
當(dāng)set heading off 時(shí),在每頁的上面不顯示列標(biāo)題,而是以空白行代替 
  
5).設(shè)置一行可以容納的字符數(shù) 
SQL> SET LIN[ESIZE] {80n} 
   假如一行的輸出內(nèi)容大于設(shè)置的一行可容納的字符數(shù),則折行顯示。 
  
6).設(shè)置頁與頁之間的分隔 
SQL> SET NEWP[AGE] {1nNONE} 
當(dāng)set newpage 0 時(shí),會(huì)在每頁的開頭有一個(gè)小的黑方框。 
當(dāng)set newpage n 時(shí),會(huì)在頁和頁之間隔著n個(gè)空行。 
當(dāng)set newpage none 時(shí),會(huì)在頁和頁之間沒有任何間隔。 
  
7).顯示時(shí),用text值代替NULL值 
SQL> SET NULL text 
  
8).設(shè)置一頁有多少行數(shù) 
SQL> SET PAGES[IZE] {24n} 
假如設(shè)為0,則所有的輸出內(nèi)容為一頁并且不顯示列標(biāo)題 
  
9).是否顯示用DBMS_OUTPUT.PUT_LINE包進(jìn)行輸出的信息。 
SQL> SET SERVEROUT[PUT] {ONOFF}  
在編寫存儲(chǔ)過程時(shí),我們有時(shí)會(huì)用dbms_output.put_line將必要的信息輸出,以便對(duì)存儲(chǔ)過程進(jìn)行調(diào)試,只有將serveroutput變量設(shè)為on后,信息才能顯示在屏幕上。 
  
10).當(dāng)SQL語句的長度大于LINESIZE時(shí),是否在顯示時(shí)截取SQL語句。 
SQL> SET WRA[P] {ONOFF} 
   當(dāng)輸出的行的長度大于設(shè)置的行的長度時(shí)(用set linesize n命令設(shè)置),當(dāng)set wrap on時(shí),輸出行的多于的字符會(huì)另起一行顯示,否則,會(huì)將輸出行的多于字符切除,不予顯示。 
  
11).是否在屏幕上顯示輸出的內(nèi)容,主要用與SPOOL結(jié)合使用。 
SQL> SET TERM[OUT] {ONOFF} 
   在用spool命令將一個(gè)大表中的內(nèi)容輸出到一個(gè)文件中時(shí),將內(nèi)容輸出在屏幕上會(huì)耗費(fèi)大量的時(shí)間,設(shè)置set termspool off后,則輸出的內(nèi)容只會(huì)保存在輸出文件中,不會(huì)顯示在屏幕上,極大的提高了spool的速度。 
  
12).將SPOOL輸出中每行后面多余的空格去掉 
SQL> SET TRIMS[OUT] {ONOFF}  
    
13)顯示每個(gè)sql語句花費(fèi)的執(zhí)行時(shí)間 
set TIMING  {ONOFF} 
  
14.修改sql buffer中的當(dāng)前行中,第一個(gè)出現(xiàn)的字符串 
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行成為當(dāng)前行 
L[IST] [n] 
  
17.在sql buffer的當(dāng)前行下面加一行或多行 
I[NPUT] 
  
18.將指定的文本加到sql buffer的當(dāng)前行后面 
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語句保存到一個(gè)文件中 
SAVE file_name 
  
20.將一個(gè)文件中的sql語句導(dǎo)入到sql buffer中 
GET file_name 
  
21.再次執(zhí)行剛才已經(jīng)執(zhí)行的sql語句 
RUN 
or 
/ 
  
  
                         22.執(zhí)行一個(gè)存儲(chǔ)過程 
EXECUTE procedure_name 
  
23.在sql*plus中連接到指定的數(shù)據(jù)庫 
CONNECT user_name/passwd@db_alias 
  
24.設(shè)置每個(gè)報(bào)表的頂部標(biāo)題 
TTITLE 
  
25.設(shè)置每個(gè)報(bào)表的尾部標(biāo)題 
                                                                                            BTITLE 
  
26.寫一個(gè)注釋 
REMARK [text] 
  
27.將指定的信息或一個(gè)空行輸出到屏幕上 
PROMPT [text] 
  
28.將執(zhí)行的過程暫停,等待用戶響應(yīng)后繼續(xù)執(zhí)行 
PAUSE [text] 
  
Sql>PAUSE Adjust paper and press RETURN to continue. 
  
29.將一個(gè)數(shù)據(jù)庫中的一些數(shù)據(jù)拷貝到另外一個(gè)數(shù)據(jù)庫(如將一個(gè)表的數(shù)據(jù)拷貝到另一個(gè)數(shù)據(jù)庫) 
COPY {FROM database  TO database  FROM database TO database} 
{APPENDCREATEINSERTREPLACE} 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中執(zhí)行一個(gè)操作系統(tǒng)命令: 
HOST 
  
Sql> host hostname 
該命令在windows下可能被支持。 
  
31.在sql*plus中,切換到操作系統(tǒng)命令提示符下,運(yùn)行操作系統(tǒng)命令后,可以再次切換回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系統(tǒng)變量的值或sql*plus環(huán)境變量的值 
Syntax 
SHO[W] option 
where option represents one of the following terms or clauses: 
system_variable 
ALL 
BTI[TLE] 
ERR[ORS] [{FUNCTIONPROCEDUREPACKAGEPACKAGE BODY 
TRIGGERVIEWTYPETYPE BODY} [schema.]name] 
LNO 
PARAMETERS [parameter_name] 
PNO 
REL[EASE] 
REPF[OOTER] 
REPH[EADER] 
SGA 
SPOO[L] 
SQLCODE 
TTI[TLE] 
USER 
  
1) . 顯示當(dāng)前環(huán)境變量的值: 
Show all 
  
2) . 顯示當(dāng)前在創(chuàng)建函數(shù)、存儲(chǔ)過程、觸發(fā)器、包等對(duì)象的錯(cuò)誤信息 
Show error 
當(dāng)創(chuàng)建一個(gè)函數(shù)、存儲(chǔ)過程等出錯(cuò)時(shí),變可以用該命令查看在那個(gè)地方出錯(cuò)及相應(yīng)的出錯(cuò)信息,進(jìn)行修改后再次進(jìn)行編譯。 
  
3) . 顯示初始化參數(shù)的值: 
show PARAMETERS [parameter_name] 
  
4) . 顯示數(shù)據(jù)庫的版本: 
show REL[EASE] 
  
5) . 顯示SGA的大小 
show SGA 
  
6). 顯示當(dāng)前的用戶名 
show user