Oracle SQLPlus命令


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM