SQLPlus是一個被DBA和開發人員廣泛使用的功能強大的Oracle工具,可以在各個平台上擁有操作的一致性。SQLPlus可以執行輸入的SQL語句和SQL文件,通過SQLPlus可以和數據庫進行對話。以下例子基於Oracle 11g。
set命令設置運行環境
在Oracle 11g中,可以使用set命令來設置SQLPlus的運行環境。set命令語法如下:
set variable value
variable為變量名,value為變量值。下面介紹幾個常用的set變量。
pagesize變量
pagesize變量用來設置從頂部標題到頁結束行(包含頁首的空行)之間的行數。pagesize的默認值為14:
SQL> show pagesize
pagesize 14
使用set pagesize命令修改一頁的行數為18:
SQL> set pagesize 18;
SQL> select user_id,username,account_status from dba_users;
USER_ID USERNAME ACCOUNT_STATUS
---------- ------------------------------ --------------------------------
74 MGMT_VIEW OPEN
0 SYS OPEN
5 SYSTEM OPEN
30 DBSNMP OPEN
72 SYSMAN OPEN
84 SCOTT OPEN
9 OUTLN EXPIRED & LOCKED
75 FLOWS_FILES EXPIRED & LOCKED
57 MDSYS EXPIRED & LOCKED
53 ORDSYS EXPIRED & LOCKED
42 EXFSYS EXPIRED & LOCKED
32 WMSYS EXPIRED & LOCKED
31 APPQOSSYS EXPIRED & LOCKED
78 APEX_030200 EXPIRED & LOCKED
83 OWBSYS_AUDIT EXPIRED & LOCKED
可手動數一下是不是18行(lll¬ω¬)。
newpage變量
該變量用於設置一頁中空行的數量,默認值為1,可以使用set newpage命令改變該值:
SQL> show newpage
newpage 1
SQL> set newpage 5
SQL> select user_id,username,account_status from dba_users;
USER_ID USERNAME ACCOUNT_STATUS
---------- ------------------------------ --------------------------------
74 MGMT_VIEW OPEN
0 SYS OPEN
5 SYSTEM OPEN
30 DBSNMP OPEN
72 SYSMAN OPEN
84 SCOTT OPEN
9 OUTLN EXPIRED & LOCKED
75 FLOWS_FILES EXPIRED & LOCKED
57 MDSYS EXPIRED & LOCKED
53 ORDSYS EXPIRED & LOCKED
42 EXFSYS EXPIRED & LOCKED
linesize變量
該變量用於設置SQLPlus環境中一行所顯示的最多字符總數,默認值為80,當pagesize過小時,數據就會出現折行顯示的情況。可以使用set linesize命令來調整linesize的值:
SQL> show linesize
linesize 80
SQL> set linesize 120
pause變量
用於設置輸出結果翻頁時,是否暫停,基本語法如下:
set pause value
value可取的值有:
-
off,默認值,返回結果一次性輸出完畢,中間翻頁不會暫停;
-
on,表示輸出結果的每一頁都暫停,用戶按ENTER繼續;
-
text,在設置為on之后,繼續設置text的值,用於暫停時顯示;
比如:
SQL> set pause on
SQL> set pause '按<enter>鍵繼續'
SQL> select user_id,username,account_status from dba_users;
按<enter>鍵繼續
USER_ID USERNAME ACCOUNT_STATUS
---------- ------------------------------ --------------------------------
74 MGMT_VIEW OPEN
0 SYS OPEN
5 SYSTEM OPEN
30 DBSNMP OPEN
72 SYSMAN OPEN
84 SCOTT OPEN
9 OUTLN EXPIRED & LOCKED
75 FLOWS_FILES EXPIRED & LOCKED
57 MDSYS EXPIRED & LOCKED
53 ORDSYS EXPIRED & LOCKED
42 EXFSYS EXPIRED & LOCKED
32 WMSYS EXPIRED & LOCKED
31 APPQOSSYS EXPIRED & LOCKED
78 APEX_030200 EXPIRED & LOCKED
83 OWBSYS_AUDIT EXPIRED & LOCKED
按<enter>鍵繼續
numformat變量
該變量值用於設置顯示數值的默認格式,基本語法如下:
set numformat format
format為數值掩碼,常用值及其說明如下:
掩碼 | 說明 | 舉例 |
---|---|---|
9 | 查詢結果中數字替換格式的掩碼 | 999 |
0 | 格式中的掩碼屏蔽掉查詢結果中的數字 | 999.00 |
$ | 在查詢結果中的數字前添加美元前綴 | $999 |
S | 為數字顯示符號類型,通常用於顯示查詢結果中的正負數字 | S999 |
, | 在字符, 位置上放置都逗號/td> |
999,99 |
查看scott.emp表中的SAL字段值,然后使用”$999,999,999.00”格式顯示:
SQL> select ename,job,sal from scott.emp;
ENAME JOB SAL
---------- --------- ----------
SMITH CLERK 800
ALLEN SALESMAN 1600
WARD SALESMAN 1250
JONES MANAGER 2975
MARTIN SALESMAN 1250
BLAKE MANAGER 2850
CLARK MANAGER 2450
SCOTT ANALYST 3000
KING PRESIDENT 5000
TURNER SALESMAN 1500
ADAMS CLERK 1100
SQL> set numformat $999,999,999.00
SQL> select ename,job,sal from scott.emp;
ENAME JOB SAL
---------- --------- ----------------
SMITH CLERK $800.00
ALLEN SALESMAN $1,600.00
WARD SALESMAN $1,250.00
JONES MANAGER $2,975.00
MARTIN SALESMAN $1,250.00
BLAKE MANAGER $2,850.00
CLARK MANAGER $2,450.00
SCOTT ANALYST $3,000.00
KING PRESIDENT $5,000.00
TURNER SALESMAN $1,500.00
ADAMS CLERK $1,100.00
timing變量
該變量用於顯示執行SQL語句所花的時間,默認值為off:
SQL> set timing on
SQL> select ename,job,sal from scott.emp;
ENAME JOB SAL
---------- --------- ----------------
SMITH CLERK $800.00
ALLEN SALESMAN $1,600.00
WARD SALESMAN $1,250.00
JONES MANAGER $2,975.00
MARTIN SALESMAN $1,250.00
BLAKE MANAGER $2,850.00
CLARK MANAGER $2,450.00
SCOTT ANALYST $3,000.00
KING PRESIDENT $5,000.00
TURNER SALESMAN $1,500.00
ADAMS CLERK $1,100.00
ENAME JOB SAL
---------- --------- ----------------
JAMES CLERK $950.00
FORD ANALYST $3,000.00
MILLER CLERK $1,300.00
已選擇14行。
已用時間: 00: 00: 00.04
set命令還有很多變量可用,可使用help set
命令來查看。
常用SQLPlus命令
help命令
help命令用來幫助用戶查詢指定命令詳細介紹,類似於Linux的man,其的語法如下:
help|? [topic]
?
表示一個命令的部分字符,用於模糊查詢;topic參數表示要查詢的命令的完整名稱。如果直接輸入help,則顯示的是命令本身的詳細信息:
SQL> help
HELP
----
Accesses this command line help system. Enter HELP INDEX or ? INDEX
for a list of topics.
You can view SQL*Plus resources at
http://www.oracle.com/technology/tech/sql_plus/
and the Oracle Database Library at
http://www.oracle.com/technology/documentation/
HELP|? [topic]
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
SET system_variable value
where system_variable and value represent one of the following clauses:
APPI[NFO]{OFF|ON|text} NEWP[AGE] {1|n|NONE}
ARRAY[SIZE] {15|n} NULL text
AUTO[COMMIT] {OFF|ON|IMM[EDIATE]|n} NUMF[ORMAT] format
AUTOP[RINT] {OFF|ON} NUM[WIDTH] {10|n}
AUTORECOVERY {OFF|ON} PAGES[IZE] {14|n}
AUTOT[RACE] {OFF|ON|TRACE[ONLY]} PAU[SE] {OFF|ON|text}
[EXP[LAIN]] [STAT[ISTICS]] RECSEP {WR[APPED]|EA[CH]|OFF}
BLO[CKTERMINATOR] {.|c|ON|OFF} RECSEPCHAR {_|c}
CMDS[EP] {;|c|OFF|ON} SERVEROUT[PUT] {ON|OFF}
COLSEP {_|text} [SIZE {n | UNLIMITED}]
CON[CAT] {.|c|ON|OFF} [FOR[MAT] {WRA[PPED] |
COPYC[OMMIT] {0|n} WOR[D_WRAPPED] |
COPYTYPECHECK {ON|OFF} TRU[NCATED]}]
DEF[INE] {&|c|ON|OFF} SHIFT[INOUT] {VIS[IBLE] |
DESCRIBE [DEPTH {1|n|ALL}] INV[ISIBLE]}
[LINENUM {OFF|ON}] [INDENT {OFF|ON}] SHOW[MODE] {OFF|ON}
ECHO {OFF|ON} SQLBL[ANKLINES] {OFF|ON}
EDITF[ILE] file_name[.ext] SQLC[ASE] {MIX[ED] |
EMB[EDDED] {OFF|ON} LO[WER] | UP[PER]}
ERRORL[OGGING] {ON|OFF} SQLCO[NTINUE] {> | text}
[TABLE [schema.]tablename] SQLN[UMBER] {ON|OFF}
[TRUNCATE] [IDENTIFIER identifier] SQLPLUSCOMPAT[IBILITY] {x.y[.z]}
ESC[APE] {\|c|OFF|ON} SQLPRE[FIX] {#|c}
ESCCHAR {@|?|%|$|OFF} SQLP[ROMPT] {SQL>|text}
EXITC[OMMIT] {ON|OFF} SQLT[ERMINATOR] {;|c|ON|OFF}
FEED[BACK] {6|n|ON|OFF} SUF[FIX] {SQL|text}
FLAGGER {OFF|ENTRY|INTERMED[IATE]|FULL} TAB {ON|OFF}
FLU[SH] {ON|OFF} TERM[OUT] {ON|OFF}
HEA[DING] {ON|OFF} TI[ME] {OFF|ON}
HEADS[EP] {||c|ON|OFF} TIMI[NG] {OFF|ON}
INSTANCE [instance_path|LOCAL] TRIM[OUT] {ON|OFF}
LIN[ESIZE] {80|n} TRIMS[POOL] {OFF|ON}
LOBOF[FSET] {1|n} UND[ERLINE] {-|c|ON|OFF}
LOGSOURCE [pathname] VER[IFY] {ON|OFF}
LONG {80|n} WRA[P] {ON|OFF}
LONGC[HUNKSIZE] {80|n} XQUERY {BASEURI text|
MARK[UP] HTML [OFF|ON] ORDERING{UNORDERED|
[HEAD text] [BODY text] [TABLE text] ORDERED|DEFAULT}|
[ENTMAP {ON|OFF}] NODE{BYVALUE|BYREFERENCE|
[SPOOL {OFF|ON}] DEFAULT}|
[PRE[FORMAT] {OFF|ON}] CONTEXT text}
也可以使用help index
命令查看SQLPlus命令清單:
SQL> help index
Enter Help [topic] for help.
@ COPY PAUSE SHUTDOWN
@@ DEFINE PRINT SPOOL
/ DEL PROMPT SQLPLUS
ACCEPT DESCRIBE QUIT START
APPEND DISCONNECT RECOVER STARTUP
ARCHIVE LOG EDIT REMARK STORE
ATTRIBUTE EXECUTE REPFOOTER TIMING
BREAK EXIT REPHEADER TTITLE
BTITLE GET RESERVED WORDS (SQL) UNDEFINE
CHANGE HELP RESERVED WORDS (PL/SQL) VARIABLE
CLEAR HOST RUN WHENEVER OSERROR
COLUMN INPUT SAVE WHENEVER SQLERROR
COMPUTE LIST SET XQUERY
CONNECT PASSWORD SHOW
describe命令
該命令用於查詢指定數據表的組成結構,語法如下:
desc[ribe] object_name
describe可縮寫為desc。
比如查詢scott.emp表中SALESMAN的編號,姓名和工資,過程中,使用#desc scott.emp
命令查詢scott.emp表中工資字段的名稱:
SQL> select empno,ename,
2 #desc scott.emp
名稱 是否為空? 類型
----------------------------------------- -------- ----------------------------
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)
2 sal from scott.emp where job = 'SALESMAN';
EMPNO ENAME SAL
---------- ---------- ----------
7499 ALLEN 1600
7521 WARD 1250
7654 MARTIN 1250
7844 TURNER 1500
spool命令
該命令可以將查詢結果輸出到指定文件中,spool的語法格式如下:
spo[ol] [file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]] | OFF | OUT]
-
cre[ate]
,表示創建一個新的文件,默認值; -
rep[lace]
,表示覆蓋已存在的文件; -
app[end]
,表示追加到一個已存在的文件中; -
off|out
,表示關閉spool輸出。
比如:
SQL> spool d:\emp.txt
SQL> select empno,ename,job,sal from scott.emp;
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7369 SMITH CLERK 800
7499 ALLEN SALESMAN 1600
7521 WARD SALESMAN 1250
7566 JONES MANAGER 2975
7654 MARTIN SALESMAN 1250
7698 BLAKE MANAGER 2850
7782 CLARK MANAGER 2450
7788 SCOTT ANALYST 3000
7839 KING PRESIDENT 5000
7844 TURNER SALESMAN 1500
7876 ADAMS CLERK 1100
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7900 JAMES CLERK 950
7902 FORD ANALYST 3000
7934 MILLER CLERK 1300
已選擇14行。
SQL> spool off
到D盤打開emp.txt如下:
define命令
該命令用來定義一個變量並賦值,基本語法如下:
def[ine] [variable] | [variable = text]
比如:
SQL> define vjob='SALESMAN'
SQL> define vjob
DEFINE VJOB = "SALESMAN" (CHAR)
show命令
show命令用來顯示SQLPlus系統變量的值,語法如下:
sho[w] option
option表示要顯示的系統選項,常用的值有:all,parameters [parameter_name],sga,spool和user等。
SQL> show parameters db_block_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
SQL> show sga
Total System Global Area 3373858816 bytes
Fixed Size 2180424 bytes
Variable Size 1862273720 bytes
Database Buffers 1493172224 bytes
Redo Buffers 16232448 bytes
SQL> show user
USER 為 "SYSTEM"
save命令
該命令將SQL緩沖區的最近一條SQL或PL/SQL塊保存到指定的文件中,語法如下:
sav[e] [FILE] file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]]
比如:
SQL> select * from scott.dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> save d:\dept.sql
已創建 file d:\dept.sql
如果不指定文件擴展名,默認為.sql。
get命令
該命令將一個SQL腳本文件的內容放進SQL的緩沖區,語法格式如下:
get [FILE] file_name[.ext] [LIST | NOLIST]
其中list表示加載到緩沖區的時候顯示文件的內容,nolist則表示不顯示。
比如加載d:\dept.sql到SQL緩沖區,並運行命令/
執行該語句:
SQL> get d:\dept.sql list
1* select * from scott.dept
SQL> /
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
start和@
兩個命令都是用於執行一個sql腳本文件,比如:
SQL> start d:\dept.sql
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> @ d:\dept.sql
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
格式化查詢結果
column
該命令可以實現格式化查詢結果,設置列寬,設置列標題等。語法如下:
col[umn] [column_name|alias|option]
column_name
用於指定要設置的列的名稱,alias
用於指定列的別名,option
用於指定列的顯示格式,其值和說明如下表所示:
option選項的值 | 說明 |
---|---|
clear | 清除指定列所設置的格式,恢復默認值 |
format | 格式化指定列 |
heading | 指定列標題 |
justify | 調整列標題的對齊方式,默認情況下:數值類型的右對齊,其他類型的左對齊 |
null | 替換null值 |
print/noprint | 顯示列標題或隱藏列標題,默認為print |
on/off | 控制定義的顯示屬性狀態,off表示定義的所有顯示屬性都不起作用 |
wrapped | 當字符串的長度超過顯示寬度時,將字符串的超出部分折疊到下一行顯示 |
word_wrapped | 表示從一個完整的字符處折疊 |
truncated | 表示截取字符串尾部 |
format選項
使用format選項格式化scott.emp表中的sal列,格式為$999,999.00:
SQL> column sal format $999,999.00
SQL> select empno,ename,sal from scott.emp;
EMPNO ENAME SAL
---------- ---------- ------------
7369 SMITH $800.00
7499 ALLEN $1,600.00
7521 WARD $1,250.00
7566 JONES $2,975.00
7654 MARTIN $1,250.00
7698 BLAKE $2,850.00
7782 CLARK $2,450.00
7788 SCOTT $3,000.00
7839 KING $5,000.00
7844 TURNER $1,500.00
7876 ADAMS $1,100.00
EMPNO ENAME SAL
---------- ---------- ------------
7900 JAMES $950.00
7902 FORD $3,000.00
7934 MILLER $1,300.00
已選擇14行。
heading選項
使用heading選項將scott.emp表的empno,ename和sal三個列名轉換為中文:
SQL> column empno heading 員工編號
SQL> column ename heading 員工姓名
SQL> column sal heading 工資
SQL> select empno,ename,sal from scott.emp;
員工編號 員工姓名 工資
---------- ---------- ------------
7369 SMITH $800.00
7499 ALLEN $1,600.00
7521 WARD $1,250.00
7566 JONES $2,975.00
7654 MARTIN $1,250.00
7698 BLAKE $2,850.00
7782 CLARK $2,450.00
7788 SCOTT $3,000.00
7839 KING $5,000.00
7844 TURNER $1,500.00
7876 ADAMS $1,100.00
員工編號 員工姓名 工資
---------- ---------- ------------
7900 JAMES $950.00
7902 FORD $3,000.00
7934 MILLER $1,300.00
已選擇14行。
null選項
使用null選項將scott.emp表中comm列值為null顯示成“空值”:
SQL> column comm null '空值'
SQL> select empno,ename,comm from scott.emp where comm is null;
員工編號 員工姓名 COMM
---------- ---------- ----------
7369 SMITH 空值
7566 JONES 空值
7698 BLAKE 空值
7782 CLARK 空值
7788 SCOTT 空值
7839 KING 空值
7876 ADAMS 空值
7900 JAMES 空值
7902 FORD 空值
7934 MILLER 空值
已選擇10行。
wrapped/word_wrapped選項
使用wrapped選項實現按照指定長度折行:
SQL> create table test(
2 col1 varchar2(100)
3 );
表已創建。
SQL> insert into test(col1) values ('HOW ARE YOU?');
已創建 1 行。
SQL> select col1 from test;
COL1
--------------------------------------------------------------------------------
HOW ARE YOU?
SQL> column col1 format a5
SQL> column col1 wrapped
SQL> select col1 from test;
COL1
-----
HOW A
RE YO
U?
使用word_wrapped選項按照完整字符串折行
SQL> column col1 word_wrapped
SQL> select col1 from test;
COL1
-----
HOW
ARE
YOU?
ttitle和btitle命令
這兩個命令分別用來設置打印時每頁的頁首和頁腳標題,其中ttitle語法如下(btitle語法類似):
tti[tle] [printspec [text|variable] ...] | [OFF|ON]
printspec
作為頭標題的修飾性選項,其值和說明如下表所示:
printspec選項的值 | 說明 |
---|---|
col | 指定當前行的第幾列打印頭標題 |
skip | 跳到從下一行開始的第幾行,默認為1 |
left | 在當前行中左對齊打印數據 |
center | 在當前行中間打印數據 |
right | 在當前行中右對齊打印數據 |
bold | 以黑體打印數據 |
比如:打印輸出scott.salgrade數據表中的記錄,並設置標題:
SQL> set pagesize 8
SQL> ttitle left '銷售情況排行表'
SQL> btitle left '打印日期2017年11月5日 打印人 MrBird'
SQL> select * from scott.salgrade;
銷售情況排行表
GRADE LOSAL HISAL
---------- ---------- ----------
1 700 1200
2 1201 1400
3 1401 2000
打印日期2017年11月5日 打印人 aaa
銷售情況排行表
GRADE LOSAL HISAL
---------- ---------- ----------
4 2001 3000
5 3001 9999
打印日期2017年11月5日 打印人 aaa