SQL是一種命令式的語言,它是用戶操作數據庫的最重要的一種方式。
SQL語句在執行時,需要有一個執行環境。
開發人員在開發軟件時,最終的結果是形成一個應用程序。
在應用程序中可以嵌入SQL語句,利用這些SQL語句可以訪問數據庫。
這時應用程序作為數據庫服務器的客戶,與數據庫服務器以客戶/服務器模式工作。
把SQL語句嵌入到應用程序中的好處是使最終用戶無需了解SQL的工作原理,也不需要知道SQL命令的使用方法,只要能夠正確操作應用程序,就能夠與數據庫服務器進行交互。
然而對於數據庫管理員,應用程序遠遠不能達到他們的目的,訪問數據庫最直接的方式是利用數據庫軟件提供的實用程序。
Oracle 提供了一個功能強大的實用工具--SQL*Plus。
SQL*Plus 是Oracle提供的一個客戶端工具,也是遠程客戶訪問數據庫的一種重要途徑。
在SQL*Plus 中可以執行任一條SQL語句,可以執行一個PL/SQL塊,也可以執行SQL*Plus本身的命令,而且幾乎所有的管理任務都可以在SQL*Plus 中完成。
SQL*Plus的基本用法
如果要使用SQL*Plus與數據庫服務器進行交互,首先要登錄到數據庫服務器上,這時在SQL*Plus進程和數據庫服務器之間將建立一條連接,它們以客戶/服務器模式工作。
登錄與退出
啟動SQL*Plus的命令是sqlplus ,在操作系統提示符下輸入sqlplus ,系統將顯示版本、日期、版權等信息,然后提示用戶輸入用戶名和口令。
如果輸入正確,則在SQL*Plus和數據庫服務器之間將建立一條連接,井顯示服務器的信息,最后出現SQL*Plus的提示符“ SQL>”,在這個提示符下就可以輸入需要執行的命令了。
如果以sys用戶身份登錄,在用戶名之后還應該指定身份“ as sysdba ”或“ as sysoper ”。
啟動SQL*Plus時,還可以在sqlplus命令之后直接指定用戶名和口令,這時系統將不再提示輸入用戶名和口令,而是直接登錄到數據庫服務器。
格式是:用戶名/口令。
如果在一台計算機上安裝了多個數據庫服務器,為了登錄到正確的數據庫,在進入SQL*Plus之前,先要設置環境變量ORACLE_SID ,將其值設置為要登錄的數據庫。
例如:
SET ORACLE_SID=orcl
如果數據庫服務器運行在UNIX下,通過以下方式設置環境變量ORACLE_SID:
ORACLE_SID=orcl
EXPORT ORACLE_SID
在默認情況下, SQL*Plus和Oracle服務器位於同一台計算機上,啟動SQL*Plus時,它將自動登錄到本機的數據庫服務器上。
如果SQL*Plus和Oracle服務器不在同一台計算機上,在登錄時還要指定所使用的網絡服務名。
例如:
sqlplus scott/tiger@orcl
網絡服務名:是可以任意指定的,可以通過net_manager工具配置。
這時SQL*Plus和Oracle服務器將通過Oracle Net 進行通信。
無論采用哪種登錄方式,登錄成功后將出現SQL*Plus的提示符“ SQL>”。
SQL*Plus是一個基於字符界面的工具,所有的命令都需要手工輸入。
在提示符之后輸入的命令以分號結束。
如果命令太長,可以輸入回車,在換行之后繼續輸入,這時在每行之前將自動出現當前的行號。
在命令的最后輸入分號,然后回車,這條命令將提交給數據庫服務器執行。
需要注意的是,分號並不是SQL命令的一部分,而是一條SQL命令結束的標志。
退出SQL*Plus時,在提示符之后輸入命令QUIT或EXIT即可。
如果要在不退出SQL*Plus的情況下斷開與數據庫服務器的連接,則輸入DISCONNECT(DISCONN)命令。
如果要重新連接,或者在已經連接的情況下以另一個用戶的身份連接,則使用CONNECT(CONN)命令。
這條命令的格式為:
CONNECT 用戶名/口令 as sysdba
如果是SYS用戶,則使用“as sysdba”或者“as sysoper”參數。
如果是遠程登錄,還要在用戶名和口令之后輸入網絡服務名。
如:CONNECT 用戶名/口令@網絡服務名 as sysdba
在SQL*Plus 中還可以執行操作系統命令。
host命令使得用戶可以在不退出SQL*Plus的情況下執行操作系統命令。
在SQL*Plus提示符下執行host命令后,將進入操作系統提示符,在這里可以執行操作系統命令。
在操作系統提示符下輸入exit命令,將返回SQL*Plus 。
SQL*Plus 的UNIX版本還提供了一個“!”命令,它使得用戶可以在SQL*Plus提示符下直接執行UNIX命令。
UNIX命令執行結束后重新顯示SQL*Plus提示符。
如何獲取幫助信息
如果在使用SQL*Plus命令時有困難,可以使用HELP或?命令獲得幫助信息。
首先,可以獲得幫助索引,命令的格式為:
HELP INDEX
上述命令都屬於SQL*Plus ,也就是說,這些命令只能在SQL*Plus 中執行。
讀者在學習Oracle 的過程中,一定要搞清楚哪些是SQL*Plus命令,哪些是SQL命令。
通過HELP命令可以進一步獲得每條命令的詳細幫助信息。
獲取幫助的命令格式為:
HELP 命令
例如:
HELP COPE
如何修改SQL*Plus的設置信息
在SQL*Plus 中有兩類相關的設置信息,一類是SQL*Plus本身的設置信息,這類信息主要控制SQL*Plus的輸出格式; 另一類是數據庫服務器的設置信息,這類信息主要來自實例的參數文件。
顯示SQL*Plus設置信息的命令是show,例如,顯示當前登錄用戶的命令為:
show user
如果要顯示SQL*Plus 的所有設置信息,執行“ show all”命令。
如果要顯示某個具體的設置信息,可以在show命令之后跟上相關的關鍵字,例如:
show timing
下面列出了SQL*Plus主要的設置信息反其意義:
設置信息 可選值 默認值 意義
autocommit on|off|immediate off 控制DML語句執行后是否立即提交
autorecovery on|off off 開啟或關閉自動恢復數據庫的功能
define 用戶自定義 & 在用戶自定義變量前面的前綴字符
editfile 用戶自定義 afiedt.buf 指定執行edit命令時打開的臨時文件
linesize 用戶自定義 80 指定一行的寬度,單位為字符
long 用戶自定義 80 為long型數據指定顯示寬度
null 用戶自定義 "" 顯示空數據時,代替的字符
sqlnumber on|off on 控制在多條SQL語句中,第2行之后繼續使用SQL*Plus提示符還是行號
sqlprompt 用戶自定義 sql> 指定SQL*Plus的提示符
sqlterminator 用戶自定義 ; 指定SQL語句的結束標志
time on |off off 指定是否將當前時間作為提示符的一部分
timing on|off off 指定是否為每一條已執行SQL語句顯示使用時間
如果要顯示數據庫服務器的參數設置信息,可以使用“ show parameter”命令,並在命令之后指定要顯示的參數名稱。
由於這些信息是從參數文件中讀取的,因此只有特權用戶可以查看這樣的信息。
例如,要查看當前數據庫的名稱,執行如下命令:
show parameter db_name
在命令執行的結果中包含參數的名稱、類型和參數值。
由於參數名都是字符串,在顯示參數時,可以只指定參數名稱的一部分,這樣,系統將顯示所有包含這個字符串的參數。
例如,要顯示所有包含字符串“db_block ”的參數設置信息,可以執行如下命令:
show parameter db_block
修改SQL*Plus設置信息的命令是SET ,這樣可以靈活控制SQL*Plus的顯示格式。
例如,SQL*Plus的默認提示符是“SQL>”,如果要將提示符改為“ SQL*Plus》”,可以執行以下命令:
set sqlprompt sql>>
需要注意的是,改變后的設置信息只對SQL*Plus的當前啟動起作用。
如果要經常修改這些設置信息,通常的做法是編寫-個腳本文件,在腳本文件中指定這些設置信息,然后在SQL*Plus 中執行腳本文件。
實例啟動與關閉
Oracle的實例是一組內存結構和后台進程的集合,通過實例,應用程序才可以訪問數據庫中的數據。
Oracle服務器是由實例和數據庫組成的,一個實例只能打開一個數據庫。
啟動Oracle服務器的命令為startup ,這條命令只有SYS用戶才可以執行。
在Windows 系統中,數據庫服務器表現為一個系統服務。
所以,只要啟動對應的系統服務,即可啟動數據庫服務器。
系統服務的命名規則為: OracleService+實例名稱。
更簡單的方也是在控制面板的管理工具中打開“服務”組件,查找Oracle服務器所對應的系統服務,使其啟動。
關閉數據庫服務器的過程與啟動過程正好相反,首先關閉數據庫,然后卸載數據庫,最后關閉實例。
關閉Oracle服務器對應的命令為shutdown ,這條命令也是只能由SYS 用戶執行。
在Windows 系統中, Oracle服務器同樣可以作為一個系統服務來關閉。
例如:
net stop oracleserviceorcl
同樣, Oracle服務器也可以通過“服務”組件進行關閉。
SQL*Plus中的緩沖區
SQL*Plus提供了一個命令緩沖區,用來保存最近執行的一條SQL語句,或者一個PL/SQL塊。
用戶可以反復執行緩沖區中的內容,也可以對緩沖區中的內容進行編輯。
執行緩沖區中的內容
執行緩沖區中內容的命令有兩個:“/”和run 。
“/”命令的作用是執行緩沖區中剛剛輸入的或者已經執行內容。
如果是一條SQL語句,它的結束標志是;,遇到分號,這條SQL語句就會執行。
如果在SQL語句執行后輸入/命令,這條SQL語句將再執行一次。
如果是PL/SQL塊,結束標志仍然是; ,只是在輸入結束后還必須輸入/命令,這個塊才能執行。
如果再次輸入“/”命令,這個塊將再次執行。
run命令與“/”命令一樣,也是再次執行緩沖區中的內容,只是在執行之前首先顯示緩沖區中的內容。
編輯緩沖區的內容
緩沖區真正的意義在於用戶可以編輯其中的內容,這樣如果語句執行出錯,用戶可以很方便地進行修改,特別是長的、復雜的SQL語句或者PL/SQL塊。
使用最頻繁的編輯命令是edit (或ed )。
這條命令的作用是打開默認的編輯器(在Windows環境中為記事本),並將緩沖區中的內容放在編輯器中。
用戶可以在編輯器中修改緩沖區中的內容,修改完后保存並退出編輯器,然后在SQL*Plus 中輸入/命令,修改后的內容將在SQL*Plus 中執行。
執行edit命令時, SQL*Plus在操作系統當前目錄中建立了-個臨時文件,用來保存當前緩沖區的內容。
這個文件的默認文件名為“ afiedt.buf”。
需要注意的是,在這個臨時文件中井不保存所有已經執行的SQL語句或者PL/SQL塊,僅當執行edit命令時,才將當前緩沖區中的內容寫入這個文件,文件中以前的內容將被覆蓋。
如果要顯示緩沖區中的內容,可以執行list (或者I )命令。
list命令以分行的形式顯示緩沖區的內容,並在每一行前面顯示行號。
如果要顯示某一行的內容,可以在list命令之后指定行號,這樣只顯示指定的一行,並使這一行成為當前行,而不是顯示所有內容。
還有一種簡單的方法用來顯示某一行的內容。
在SQL*PLUS提示符下直接輸入一行的行號,結果與將行號作為參數的list命令是等價的。
append命令(或者a )的作用是在緩沖區中當前行的末尾追加文本。
在默認情況下,最后一行是當前行。
如果以某一行的行號作為參數執行了list命令,那么指定的行將成為當前行。
append命令的格式為:
APEEND 文本
append將把指定的文本追加到當前行的末尾。
注意追加的文本不需要用引號限定,否則引號將作為文本的一部分一起被追加,在關鍵字APPEND和文本之間留兩個空格的位置。
append命令的作用是在當前行的末尾追加文本。
如果要在緩沖區中增加一行,就要使用input 命令。
input命令(或者i )的作用是在當前行之后追加一行或者多行。
在默認情況下,input命令在最后一行之后追加文本。
如果要在某一行之后追加,應該先執行list命令使該行成為當前行,然后再追加。
使用input命令追加文本時,可以只追加一行,這時input命令的格式為:
input 文本
如果要追加多行,則輸入不帶參數的input命令並回車,這時行號將變成ni 的形式,其中n是從當前行號的下一個數字開始的整數,表示該行內容是追加到緩沖區中的。
追加結束后以一個空行和回車符結束。
注意,在追加多行時, input命令為追加的新行重新顯示了行號,即上面的2i 、3i等。
輸入結束后,在下一行直接回車,這時重新顯示SQL*Plus提示符,追加操作便告結束。
如果發現緩沖區中內容有錯誤,可以用edit命令打開編輯器,在編輯器中進行修改。
還有一種修改方法,就是change命令。
change (或者c )命令的作用是在緩沖區中當前行上用新的字符串代替舊的字符串。
這條命令的格式為:
change 當前字符串/替換字符串/
如果要清空緩沖區中的內容,可以執行del命令。
當緩沖區被清空后,就不能再執行edit命令進行編輯,也不能再執行list命令進行顯示了。
如果只刪除緩沖區中的一部分內容,則通過edit和list命令可以顯示剩下的內容。
在默認情況下, del命令刪除緩沖區中當前行的全部內容。
但是通過指定參數, del命令可以刪除指定的一行或者多行。
del命令的格式有以下形式:
• del 開始行號 結束行號 刪除開始行號和結束行號之間的行。
• del 開始行號 * 刪除開始行號和當前行之間的行。
• del * 結束行號 刪除當前行和結束行號之間的行。
• del last 刪除最后一行。
其中開始行號和結束行號是指定的行號,開始行號必須小於結束行號。
符號“*”用來代表當前行,標識符last代表最后一行。
如何對操作系統文件進行讀寫
在SQL*Plus 中可以對操作系統中的文本文件進行簡單的讀寫訪問。
例如,事先將SQL語句或者PL/SQL塊的代碼存放在文本文件中,再把文本文件調入緩沖區中,使之執行。
或者把當前緩沖區中的內容保存到一個文件中,或者把SQL語句、PL/SQL塊的執行結果保存到文件中。
讀文件涉及的命令包括@、get 、start等命令。
@命令的作用是將指定的文本文件的內容讀到緩沖區中,並執行它。
文本文件可以是本地文件,也可以是遠程服務器上的文件。
如果是本地文件,@命令的命令的執行格式為:
@文件名
這里的文件名要指定完整的路徑,默認的擴展名是.sql,如果腳本文件使用了默認的擴展名,則在@命令中可以省略擴展名。
如果是遠程文件,必須將它存放到一個web服務器上,並以HTTP或FTP方式訪問。
這時@命令的命令的執行格式為(以HTTP為例):
@http://web服務器/文件名
使用@命令讀取文件時,文件中可以包含多條SQL語句,每條語句以分號結束;或者可以包含一個PL/SQL塊。
文件被讀人緩沖區中以后, SQL*Plus將按順序執行文件中的代碼,並將執行結果輸出到顯示器上。
@命令還有一個用法,就是在啟動SQL*Plus 的同時,將指定的文件讀入緩沖區並執行它。
這時@命令和文件名一起作為SQL*Plus的命令行參數,格式如下:
sqlplus 用戶名/口令 @腳本文件
注意,這種格式與以前提到的使用網絡服務的格式是很相似的,但是仍然有區別,請注意觀察:
sqlplus 用戶名/口令@網絡服務名
由於文件名和網絡服務名都表現為字符串,所以單純從名字上無法區分到底使用了文件名還是網絡服務名。
二者的區別在於第一種格式中在用戶名/口令之后有一個空格,這時將把后面的參數解釋為一個文件,並把這個文件加載到緩沖區中。
在第二種格式中,用戶名/口令之后沒有空格,這時將后面的參數解釋為網絡服務名。
get命令的作用與@命令相似,但是它只是把文件加載到緩沖區中,並不直接執行。
get 命令的的執行格式為:
get 文件名選項
其中文件名的默認擴展名為.sql,在get命令中可以省略。
目前get命令只支持本地的操作系統文件。
可以使用的選項有兩個: LIST和NO LIST 。
其中LIST選項指定將文件的內容讀到緩沖區的同時,還要在顯示器上輸出,這是默認選項。
選項NOLIST使得文件的內容不在顯示器上輸出。
使用get命令時還要注意,在文本文件中只能包含一條SQL語句,而且不能以分號結束。
也可以只包含一個PL/SQL塊,塊以分號結束。
例如:
get C:\Users\Administrator\Desktop\aa list
注意文件名選項LIST和NOLIST位置。
在使用@和get命令時要注意這些格式上的差別。
start命令與@命令是等價的,這里不再贅述。
寫文件涉及的命令包括save和spool。
其中save命令用於將當前緩沖區中的內容寫入一個操作系統文件,而spool命令用於將命令的執行結果輸出到一個操作系統文件。
save命令的格式為:
SAVE 文件名稱 選項
其中選項指定以什么樣的方式寫文件。
可以使用的選項有以下三個:
•CREATE 如果文件不存在,則創建。否則,命令執行失敗。
•APPEND 如果文件不存在,則創建。否則,在文件末尾追加。
•REPLACE 如果文件不存在,則創建。否則刪除原文件,重新創建。
如果不指定完整的路徑,則在當前目錄下產生這個文件,文件的默認擴展名是.sql。
spool 命令利用假脫機技術,用於將SQL*Plus的輸出寫入到文件中,它有以下幾種用法:
•spool 得到當前spool 的狀態,默認為不可用。
•spool 文件名 啟動spool ,並打開指定的文件。
•spool off 關閉spool ,並將SQL*Plus 的輸出寫入文件中。
•spool out 關閉spool ,將SQL*Plus的輸出寫入文件中,並同時送往打印機。
如果在SQL*Plus 中以命令行的方式執行spool命令,那么從執行spool命令並打開文件開始,此后的所有輸出,包括錯誤信息,以及用戶的鍵盤輸入,都將寫入指定的文件,直到遇到“ spool off”或者“spool out”。
但是這些信息的寫人是一次性完成,即在執行“ spool off”或者“ spool out ”的一瞬間,這些信息才一次全部寫入文件,包括最后執行的“ spool off”或者“ spool out”命令本身。
文件的默認擴展名為.LST ,默認的路徑是當前目錄。
spool命令通常的用法是生成報表。
首先將精心設計的SQL語句存放在一個文件中,在輸出的語句前后加上spool命令,然后將這個文件讀到緩沖區中執行。
這樣在寫入的文件中只有命令執行的結果,而不包括SQL語句本身。
注:在執行文本文件時,只能使用@,而不能使用get來執行。
文件中SQL語句的執行結果顯示在屏幕上,同時在當前目錄下生成.LST 文件,文件的內容與屏幕上顯示的結果完全一致。
如何在SQL*Plus中使用變量
為了使數據處理更加靈活,在SQL*Plus 中可以使用變量。
SQL*Plus 中的變量在SQL*Plus中的整個啟動期間一直有效,這些變量可以用在SQL語句、PL/SQL塊以及文本文件中。
在執行這些代碼時,先將變量替換為變量的值,然后再執行。
用戶自定義的變量
用戶可以根據需要,自己定義變量。
有兩種類型的自定義變量,第一類變量不需要定義,可以直接使用,在執行代碼時SQL*Plus將提示用戶輸入變量的值。
第二類變量需要事先定義,並且需要賦初值。
第一類變量不需要事先定義,在SQL語句、PL/SQL塊以及腳本文件中可以直接使用。
這類變量的特點是在變量名前面有一個“&”符號。
當執行代碼時,如果發現有這樣的變量,SQL*Plus將提示用戶逐個輸入變量的值,當用變量值代替變量后,才執行代碼。
為了使用戶在每次執行代碼時不需要多次輸入變量的值,可以在變量名前加上“&&”符號。
使用這種形式的變量,只需要在第一次遇到這個變量時輸入變量的值,變量值將保存下來,以后就不需要不斷輸入了。
在SQL*Plus 中可以使用的第二類自定義變量需要事先定義,而且需要提供初值。定義變量
的命令是DEFINE 。定義變量的格式是:
DEFINE 變量名=變量值
變量經定義后,就可以直接使用了。
實際上,用DEFINE命令定義的變量和使用“&”的變量在本質上是一樣的。
用DEFINE命令定義變量以后,由於變量已經有值,所以在使用變量時不再提示用戶輸入變量的值。
如果執行不帶參數的DEFINE命令,系統將列出所有已經定義的變量,包括系統定義的變量和用“&”定義的變量,以及即將提到的參數變量。
注:這里用“&”定義的變量,是指&&而不是&,因為&&會保存變量值。
例如:
DEFINE salary=3000
在這里定義了變量,然后在SQL語句中就可以直接使用這個變量了。
在使用變量時,仍然用“&變量名”的形式來引用變量的值。
例如:
SELECT &salary FROM emp;
當一個變量不再使用時,可以將其刪除。
undefine命令用於取消一個變量的定義。
刪除一個變量的命令格式為:
undefine 變量名
參數變量
在SQL*Plus 中,除了用戶自定義的變量外,還有一類變量,這就是參數變量。
參數變量在使用時不需要事先定義,可以直接使用。
前面我們講述了get和@命令的用法。
這兩個命令的作用是將一個文本文件加載到緩沖區中,使之執行。
因為文本文件的內容是固定的,在執行期間不能被修改,所以只能執行固定的代碼,這就為靈活的數據操作帶來了一定的困難。
例如,要查詢某部門中員工的工資情況。
部門號事先不確定,而是根據實際情況臨時確定的。
這樣在文本文件的SELECT語句中就不能將部門號指定為一個固定值。
解決這個問題的一個辦法是使用參數變量。
由於部門號是不確定的,所以在執行文本文件時可以將實際的部門號作為一個參數,在SELECT語句中通過參數變量引用這個參數。
參數在SQL*Plus的命令行中指定的格式為:
@文件名參數1 參數2 參數3 ••
這樣在文本文件中可以用參數變量& l 、&2 、& 3分別引用參數1 、參數2 、參數3 ...
例如:
腳本文件中的內容如下:
select dname from dept,emp where dept.deptno=&1 AND sal>&2;
執行上面的腳本文件:
@aa 10 2000
與變量有關的交互式命令
SQL*Plus還提供了幾條交互式命令,主要包括prompt 、accept和pause 。
這幾條命令主要用在文本文件中,用來完成靈活的輸入輸出。
prompt命令用來在屏幕上顯示指定的字符串。
這條命令的格式為:
prompt 字符串
注意這里的字符串不需要單引號限定,即使是用空格分開的幾個字樣串。
prompt命令只是簡單地把其后的所有內容在屏幕上顯示。
accept命令的作用是接收用戶的鍵盤輸入,並把用戶輸入的數據存放到指定的變量中,它一般與prompt命令配合使用。
accept命令的格式為:
accept 變量名 變量類型 prompt 提示信息 選項
其中變量名是指存放數據的變量,這個變量不需要要事先定義,可直接使用。
變量類型是指輸入的數據的類型,目前SQL*Plus 只支持數字型、字符型和日期型數據的輸入。
prompt用來指定在輸入數據時向用戶顯示的提示信息。
選項指定了一些附加的功能,可以使用的選項包括:hide和default 。
hide功能使用戶的鍵盤輸入不在屏幕上顯示,這在輸入保密信息時非常有用。
default為變量指定默認值,在輸入數據時如果直接回車,則使用該默認值。
pause命令的作用是使當前的執行暫時停止,在用戶輸入回車鍵后繼續。
一般情況pause命令用在文本文件的兩條命令之間,使第一條命令執行后出現暫停,待用戶輸入回車鍵后繼續執行。
pause命令的格式為:
pause 文本
其中文本是在暫停時向用戶顯示的提示信息。
例如:
現在,構造一個文本文件, 演示這幾條命令的用法。
文本文件e.sql的功能是統計某個部門的員工工資,部門號需要用戶從鍵盤輸入。
文本文件的內容如下:
prompt 工資統計現在開始
accept dno number prompt 請輸入部門號: default 0
pause 請輸入回車鍵開始統計...
SELECT ename, sal FROM emp WHERE deptno=&dno;
這個腳本文件的執行過程為:
@e
如果希望生成一個報表,那么可以在SELECT前后分別加上spool命令,將統計的結果寫到一個文件中,或者發往打印機。
SQL*Plus報表功能
SQL*Plus有一個強大的功能,就是能夠根據用戶的設計生成美觀的報表。
實際上,利用本章中前面介紹的知識已經能夠生成一個簡單的報表了,但是如果要生成規范的、美觀的報表,還要學習SQL*Plus的其他一些功能。
SQL*Plus的報表功能是利用它的命令來實現的。
首先,用戶要根據自己的意圖,設計報表的顯示格式,這包括報表的標題、各列的顯示格式等。
然后構造查詢語句,決定要對哪些數據進行顯示。
最后還要決定把報表僅僅顯示在屏幕上,還是存放在文本文件中,或者送往打印機。
一般情況下,生成一個報表需要許多條命令,如果每次在生成報表時都輸入這么多的命令,是很麻煩的事情。
通常的做法是把這些命令放到一個文本文件中,在需要時只要把這個文本文件讀到緩沖區中,井使其執行即可。
報表的標題設計
報表的標題是利用SQL*Plus 的兩個命令來設計的,即TTITLE和BTITLE 。
其中TTITLE命令用來設計報表的頭部標題,而BTITLE用來設計報表的尾部標題。
TTITLE命令設計的頭部標題顯示在報表每頁的頂部。
設計頭部標題時,要指定顯示的信息和顯示的位置,還可以使標題分布在多行之中。
TTITLE命令有以下幾種執行格式:
• ttitle onloff :打開或關閉頭部標題的顯示,默認為on 。
• ttitle 頭部標題信息:設計頭部標題信息。
• ttitle :獲得當前的標題設置信息。
其中ttitle on用來打開頭部標題的顯示功能,而ttitle off用來關閉這個功能,在默認情況下,這個功能是可用的。
用ttitle命令設計頭部標題的操作是比較復雜的。
這條命令的格式為:
ttitle format 顯示格式 顯示位置 顯示信息
其中format參數用來規定標題的顯示格式,這個參數是可選的。
顯示位置規定標題在一行中的位置,可選的位置有三個: CENTER (中間)、LEFT (左邊)和RIGHT (右邊)。
顯示信息指定了標題的內容。
一般情況下,標題可以指定為以下內容:
·指定的文本
• SQL.LNO 當前的行號
• SQL.PNO 當前的頁號
• SQL.RELEASE 當前Oracle的版本號
• SQL.USER 當前登錄的用戶名稱
例如,設計一個顯示在正中的標題,命令格式為:
ttitle center 藍天集團公司員工工資統計表
如果在標題中要分開顯示多條信息,例如制表人、當前頁號等,可以在ttitle命令中分別設置不同信息的顯示格式、顯示位置和顯示內容。
如果這些信息要在多行中顯示,可以在兩條信息之間使用SKIP選項。
這個選項使后面的信息跳過指定的行數再顯示,它需要一個整型參數,單位是行數。
例如,在剛才設計的標題的基礎上,增加制表人和當前頁號,作為副標題。
副標題在主標題之下兩行處顯示。
如果命令太長,一行容納不下時,可以用“-”符號分行,將命令分為多行書寫。
滿足上述要求的命令格式為:
ttitle center 藍天集團公司員工工資統計表 skip 2 left -
制表人: sql.user rigth 頁碼: sql.pno
BTITLE命令的用法與TTITLE命令是一樣的,區別在於BTITLE命令用來設計尾部標題,顯示的位置在報表每頁的底部。
報表顯示格式的設計
報表的顯示格式是指報表中數據的顯示格式。
有兩條命令用來設計報表的顯示格式,它們是COLUMN和BREAK 。
COLUMN命令用來設計某一列數據的顯示格式,而BREAK命令使數據根據某個標准分組顯示。
COLUMN命令的作用是設計某一列的顯示格式,包括列標題的文字和對齊方式、列數據的寬度和顯示格式等。
這條命令是比較復雜的,主要表現為它有許多可以使用的選項。
讀者應該多練習它的使用,注意觀察命令執行的結果,從中總結經驗。
COLUMN命令的格式為:
column 列名 選項
COLUMN命令的主要選項有以下幾個:
•heading :指定列標題的顯示文字。
•format :指定列數據的顯示格式。
• justify :指定列標題的對齊方式,包括左( left )、居中( center )、右( right )。
•null : 當列數據為空時,將顯示指定的文本。
• wrappedltruncated :規定當列標題或數據超出規定的寬度時,如何顯示。
其中wrapped 為默認值表示換一行繼續顯示。
Truncated表示截斷余下的數據。
其中heading選項用來規定列的標題。
默認情況下,列的標題就是列的名字。
用戶可以定制自己喜歡的列標題。
如果列標題中有空格,要用雙引號限定。
還可以把列標題中的文字分成兩行顯示,格式是:“第一行文字|第二行文字”。
例如,通過下面的命令為ename列定義標題為“姓名”,為sal列定義標題為“工資。
column ename heading 姓名
column sal heading 工資
SELECT ename, sal FROM emp;
format選項指定數據的顯示格式,主要用來設置字符型、數字型和日期型數據的格式。
報表中的格式字符串