Oracle 之 SQL*Plus 命令
一、SQL*Plus 概述
1.1 SQL*Plus 與數據庫的交互
1.1.1 SQL*Plus 工具介紹
SQL*Plus
是一個被系統管理員(DBA) 和開發人員廣泛使用的功能強大而且很直觀的Oracle工具,也是一個可以通用在各種平臺上且操作幾乎完全一致的工具。SQL*Plus
可以執行輸入的SQL語句、包含SQL語句的文件和PL/SQL
語句, 通過SQL*Plus
可以與數據庫進行對話。
Oracle的SQL*Plus是與Oracle進行交互的客戶端工具,在SQL*Plus
中,可以運行SQL*Plus
命令與SQL*Plus
語句。
SQL*Plus
是一個基於C/S兩層結構的客戶端操作工具, 包括客戶層(即命令行窗口)和服務器層(即數據庫實例),這兩層既可以在一臺主機上,也可以在不同主機上。
除了Oracle自身提供的SQL*Plus
工具以外,還有許多第三方的Oracle開發工具,如TOAD和PL/SQL Developer等,它們均具有與SQL*Plus
同樣的功能,甚至還具備了SQL*Plus
不具備的許多新功能。SQL*Plus
工具主要用來進行數據查詢和數據處理,利用SQL*Plus
可將SQL和Oracle專有的PL/SQL結合起來進行數據查詢和處理。
1.1.2 SQL*Plus 功能
SQL*Plus
工具具備以下功能:
- 定義變量,編寫SQL語詢。
- 插入、修改、刪除、查詢,以及執行命令和PL/SQL語詢。比如,執行show parameter命令。
- 格式化查詢結構、運算處理、保存、打印機輸出等。
- 顯任何一個表的字段定義,並實現與用戶進行交互。
- 完成數據庫的幾乎所有管理工作。比如,維護表空間和數據表。
- 運行存儲在數據庫中的子程序或包。
- 以sysdba身份登錄數據庫實例,可以實現啓動/停止數據庫實例。
1.2 SQL*Plus 運行環境的設置
1.2.1 SQL*Plus 運行環境介紹
SQL*Plus
的運行環境是用來輸入、執行SQL*Plus
命令 和顯示返回結果的場所,設置合適的SQL*Plus
運行環境,可以使SQL*Plus
能夠 按照用戶的要求運行和執行各種操作。SET命令也稱SET變量或維護系統變量,利用它可爲SQL*Plus
交互建立一個特殊的環境。例如,設置屏幕上每一行能夠最多顯字符數、設置每頁打印的行數、設置某個列的寬度等。
1.2.2 SET 命令介紹
在Oracle 11g數據庫中,戶可以使用SET命令來設置SQL*Plus的運行環境。
SET命令的語法格式爲:
SET system_variable value
- system_variable:效名。
- value:變量值。
SET命令的常用變量名、可選值吸其說明如下
比如,用戶可以設置在SQL*Plus
命令提示符"SQL>”前面顯示當前的系統時間。但需要注意的是,通過SET命令設置的環境變量是臨時的,不永久的。用戶退出SQL*Plus
環境後,戶設置的環境參數會全部丟失。
SQL> set time on
14:46:01 SQL> set time off
SQL> set time on
14:46:16 SQL> set time off
SQL>
1.2.3 使用SET命令設置運行環境
(1)PAGESIZE 變量
該變用來設置從頂部標題至頸結束之間的行數,其語法格式如下:
SET PAGESIZE value
value變量的默認值爲14,根據實際情況的需要,戶可以修改value的值,該值是一個整數。如:
當SQL*Plus
返回查詢結果時,它首先會顯示用戶所選擇數據的列標題,然後在相應列標題下顯示數據行,上下兩個列標題所在行之間的空間就是SQL*Plus
的一頁。一頁中所顯示的數據行的數量就是PAGESIZE變量的值。若要查看當前SQL*Plus
環境中的一頁有多少行,可以使用show pagesize命令。
(2)NEWPAGE 變量
該變量用來設置一頁中空行的數量,其語法格式如下:
SET NEWPAGE value
value的默認值爲1,根據實際情況的需要,用戶可以修改value的值,該值是個整數。
(3) LINESIZE 變量
該變量用來設置在SQL*Plus
環境中一行所顯示的最多字符總數,其語法格式如下:
SET LINESIZE value
value的默認值爲80,根據實際情況的需要,戶可以修改value的值,該值是一個整數。
如果數據行的寬度大於LINESIZE變量的值,當在SQL*Plus
環境中按照LINESIZE指定的數量輸出字符時,數據就會發生折行顯示的情況。如果適當調整LINESIZE的值,使其值等於或稍大於數據行的寬度,則輸出的數據就不會折行。所以在實際操作Oracle數據庫的過程中,要根據具體情況來適當調整LINESIZE的值。
(4)PAUSE 變量
該變用來設置SQL*Plus
輸出結果是否滾動顯示,其語法格式如下:
SET PAUSE value
value的三種情況:
- OFF:這是默認值,返回結果一次性輸出完畢,中間的每一頂不會暫
- ON:示輸出結果的每一頁都暫停, 戶按Enter鍵後繼續顯示。
- TEXT:在設置PAUSE的值爲ON之後,若再設置TEXT的值,則每次暫停都將顯示該字符串。當PAUSE的值爲OFF時,設置TEXT值沒有任何意義。
當在SQL*Plus
環境中顯示多行數據,並且一頁無法容納下這麼多數據行時。如果PAUSE變量值爲OFF,則SQL*Plus
窗口輸出的數據行會快速滾動,非常不利於用戶查看。這就需要數據行在滾動時最好能夠按頁暫停,以便於用戶頁地查看輸出結果。當把PAUSE變量的值設置爲ON時,就可以實現控制SQL*Plus
在顯示完一頁後暫停滾動,直到按Enter鍵後才繼續顯示下一頁。
另外,在設置PAUSE量值爲ON之後,還可以通過PAUSE變量設置暫停後顯示的字符串,以便於提示用戶操作。
(5)NUMFORMAT 變量
該變用來設置顯示數值的默認格式,該格式是數值格式,其語法格式如下:
SET NUMFORMAT format
format爲數值的掩碼,數值的常用掩碼及其說明如表3.2圖所示。
當用戶查詢數據庫中的數值時,SQL*Plus
環境將使用默認的格式顯示數值,即以10個字符的寬度和常規格式來顯尿數字。
二、常用 SQL*Plus 命令
在SQL*Plus
環境中操作Oracle數據庫,除了使用SQL語句外,用戶接觸比較多的就是SQL*Plus
命令,它執行完成後,不會保存在SQl緩衝區中。
2.1 HELP 命令
SQL *plus
工具提供了許多操作Oracle數據庫的命令,並且每個命令都有很多選項,把所有命令的選項都記住,這對於用戶來說非常困難。所以,SQL*Plus
提供了HELP命令來幫助用戶查詢指定命令的選項。HELP可以向用戶提供被查詢命令的標題、功能描述、縮寫形式和參數選項(包括必選參數和可選參數)等信息。
HELP命令的語法:
HELP|? [topic]
?
:表示一個命令的部分字符,這樣就可以通過提供命令的部分字符以模糊查詢的方式來查詢命令格式,topic參數表示將要查詢的命令的完整名稱。若省略?
和topic參數,直接執行HELP命令,則會輸出HELP命令本身的語法格式及其功能描述信息。
如果用戶無法記清所要使用的SQL*Plus
命令,則可以使用help index命令來查看SQL*Plus
命令清單。
2.2 DESCRIBE 命令
在SQL*Plus
的衆多命令中,DESCRIBE命令 可能是被使用得最頻繁的一個, 它用來查詢指定數據對象的組成結構。比如,通過DESCRIBE命令查詢表和視圖的結構,查詢結果就可以列出相應對象各個列的名稱、是否爲空及類型等屬性。
DESCRIBE命令的語法如下:
desc[ribe] object_ ame;
DESCRIBE可以縮寫爲desc, object_name表示將要查詢的對象名稱。
DESCRIBE命令不僅可以查詢表、視圖的結構,而且還可以查詢過程、函數和
程序包等PL/SQL對象的規範。
2.3 SPOOL 命令
SPOOL命令可以把查詢結果輸出到指定文件中,這樣可以保存查詢結果並方便打印。
SPOOL 命令的語法如下:
SPO[OL] [file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]] | OFF | OUT]
參數file_ name用於指定脫機文件的名稱,默認的文件擴展名爲LST。在該參數後面可以跟一個關鍵字,該關鍵字有以下幾種情況:
- CRE[ATE]:示創建一個新的脫機文件, 這也是SPOOL命令的默認狀態。
- REP[LACE]:表示替代已經存在的脫機文件。
- APP[END]:表示把脫機內容附加到一個已經存在的脫機文件中。
- OFF | OUT:表示關閉spool輸出。
從spool命令開始(但不包括該命令行),一直到spool off命令行(包括該命令行)之間的所有內容都被寫入指定的文件中。
2.4 DEFINE 命令
該命令用來定義一個用戶變並且可以分配給它一個CHAR值,其語法格式如下:
DEF[INE] [variable] | [variable=text]
- variable:示定義的變量名。
- text:變量的CHAR值。
2.5 SHOW 命令
該命令用來顯示SQL*Plus
系統變量的值或SQL*Plus
環境變量的值,其語法格式如下:
SHO[W] option
option表示要顯示的系統選項,常用的選項有
- ALL
- PARAMETERS [parameter_ name]
- SGA
- SPOOL
- USER
2.6 EDIT 命令
SQL語句或PL/SQL塊在執行完畢之後,可以被存儲在一個被稱爲SQL緩衝區的內存區域中,用戶可以從SQL緩衝區中重新調用、編輯或運行最近輸入的SQL語句。
若要編輯SQL緩衝區中的最近一條SQL 語句或PL/SQL塊,既可以在SQL*Plus
環境中直接編輯,也可以使用EDIT命令實現在記事本中編輯。EDIT命令用來編輯SQL緩衝區或指定磁盤文件中的SQL語句或PL/SQL塊。
EDIT語法格式如下:
EDIT [file_name[.ext]]
file_ name表示要編輯的磁盤文件名。
若在SQL*Plus
中只輸入"EDIT" 或者它的簡寫形式"ED”,而不指定file_ name參數的值,則表示編輯SQL緩衝區中的最近一條SQL語句或PL/SQL塊。
執行EDIT命令後,SQL*Plus
工具將打開一個包含SQL語句或PL/SQL塊的記事本,用戶就可以在記事本環境下編輯SQL語句或PL/SQL塊。
2.7 SAVE 命令
該命令實現將SQL緩衝區中的最近一條SQL 語句或PL/SQL塊保存到一個文件中。
SAVE 語法格式如下:
SAVE file_name
file_ name表示要保存到的文件名,如果不爲保存的文件指定路徑,則該文件會保存在Oracle系統安裝的主目錄中(但不建議這樣做)。如果不爲保存的文件指定擴展名,則默認擴展名爲SQL,即保存的文件爲-個SQL腳本文件。
2.8 GET 命令
該命令實現把一個SQL腳本文件的內容放進SQL緩衝區,GET 語法格式如下:
GET [FILE] file_name[.ext] [LIST| NOLIST]
- file_name:要檢索的文件名,如果省略了文件的擴展名,則默認文件
的擴展名爲SQL。 - LIST:指定文件的內容加載到緩衝區時顯示文件的內容。
- NOLIST:指定文件的內容加載到緩衝區時不顯示文件的內容。
執行GET命令時,如果file_name參數不包括被檢索文件的路徑,則SQL*Plus
工具會在Oracle系統安裝的主目錄下檢索指定文件。在SQL*Plus
找到指定文件後,會把文件中的內容加載到SQL*Plus
緩衝區,並顯示該文件的內容。
2.9 start和@命令
這兩個命令都可以用來執行-個SQL腳本文件,它們的語法格式如下:
STA[RT] {ur1|file_name[.ext]} [arg ...]
@ {url|file_name[.ext]} [arg ...]
- url:表示要執行的SQL腳本文件的路徑。
- file_name:表示包含SQL腳本的文件名。
- arg:其他參數。
三、格式化查詢結果
爲了在SQL*Plus
環境中生成符合用戶需要規範的報表,SQL*Plus
工 具提供了多個用於格式化查詢結果的命令,使用這些命令可以實現設置列的標題、定義輸出值的顯示格式和顯示寬度、爲報表增加頭標題和底標題、在報表中顯示當前日期和頁號等功能。下面就對常用的格式化命令進行講解。
3.1 COLUMN命令
該命令可以實現格式化查詢結果、設置列寬度、重新設置列標題等功能。
COLUMN命令語法格式如下:
COL[UMN] [column_name | alias | option]
- column_name:於指定要設置的列的名稱。
- alias:用於指定列的別名,通過它可以把英文列標題設置爲漢字。
- option:於指定某個列的顯示格式,option選項的值及其說明如下
如果在關鍵字colum後面未指定任何參數,則column命令將顯示SQL*Plus
環境中所有列的當前定義屬性,如果在column後面指定某個列名,則顯示指定列的當前定義屬性。
3.1.1 FORMAT選項
該選項用於格式化指定的列,需要在FORMAT關鍵字的後面跟一個掩碼格式。
3.1.2 HEADING選項
該選項用於定義列標題,比如許多數據表或視圖的列名都爲英文形式,可以使用此選項將英文形式的列標題顯示爲中文形式。
3.1.3 NULL選項
在該選項的後面指定一個字符串, 如果列的值爲null,則用該字符串代替空值。
3.1.4 ON|OFF選項
該選項用於控制定義的顯示屬性的狀態,OFF表示定義的所有顯示屬性都不起作用,默認爲ON。
3.1.5 WRAPPED/WORD WRAPPED選項
這兩個選項都用於實現折行的功能,WRAPPED選項按照指定長度折行,WORD_ WRAPPED選項按照完整字符串折行。
3.2 TTITLE 和 BTITLE 命令
在SQL*Plus
環境中,執行SQL語句後的顯示結果在默認情況下包括列標題、頁分割線、查詢結果和行數合計等內容,用這些默認的輸出信息打印報表,並不十分美觀。如果能爲整個輸出結果設置報表頭(即頭標題)、爲每頁都設 置頁標題和頁碼、爲整個輸出結果設置報表尾(如打印時間或打印人員),那麼使用這樣的輸出結果打印報表一定非常美觀。
爲了實現這些功能,SQL*Plus
工具提供了TTITLE和BTITLE命令,這兩個命令分別用來設置打印時每頁的頂部和底部標題。
TTITLE命令的語法格式如下:
TTI[TLE] [printspec [text|variable] ...] | [0FF|ON]
- text:用於設置輸出結果的頭標題(即報表頭文字)。
- variable:於在頭標題中輸出相應的變量值。
- OFF:表示禁止打印頭標題。
- ON:表示允許打印頭標題。
- printspec:來作爲頭標題的修飾性選項,printspec選項的值如下:
BTITLE的語法格式與TTITLE的語法格式相同。如果在TTITLE或BTITLE命令後沒有任何參數,則顯示當前的TTITLE或BTITLE的定義。
上面代碼中所設置的頭標題和底標題的有效期直到本次會話結束後才終止。若要手動清除這些設置,可以分別使用ttitle off命令和btitle off命令取消頭標題和底標題的設置信息。
參考文獻:
- Oracle 11g從入門到精通 第二版,明日科技 著,清華大學出版社有限公司