SQL*Plus用法指南


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服務器上,並以HTTPFTP方式訪問。
這時@命令的命令的執行格式為(以HTTP為例):
@http://web服務器/文件名
使用@命令讀取文件時,文件中可以包含多條SQL語句,每條語句以分號結束;或者可以包含一個PL/SQL塊

文件被讀人緩沖區中以后, SQL*Plus將按順序執行文件中的代碼,並將執行結果輸出到顯示器上。

@命令還有一個用法,就是在啟動SQL*Plus 的同時,將指定的文件讀入緩沖區並執行它。
這時@命令和文件名一起作為SQL*Plus的命令行參數,格式如下:

 sqlplus 用戶名/口令 @腳本文件

注意,這種格式與以前提到的使用網絡服務的格式是很相似的,但是仍然有區別,請注意觀察:
sqlplus 用戶名/口令@網絡服務名
由於文件名網絡服務名都表現為字符串,所以單純從名字上無法區分到底使用了文件名還是網絡服務名。
二者的區別在於第一種格式中在用戶名/口令之后有一個空格,這時將把后面的參數解釋為一個文件,並把這個文件加載到緩沖區中。
在第二種格式中,用戶名/口令之后沒有空格,這時將后面的參數解釋為網絡服務名。

get命令的作用與@命令相似,但是它只是把文件加載到緩沖區中,並不直接執行。

get 命令的的執行格式為:
get 文件名選項
其中文件名的默認擴展名為.sql,在get命令中可以省略。

目前get命令只支持本地的操作系統文件。
可以使用的選項有兩個: LISTNO LIST 。

其中LIST選項指定將文件的內容讀到緩沖區的同時,還要在顯示器上輸出,這是默認選項。
選項NOLIST使得文件的內容不在顯示器上輸出。
使用get命令時還要注意,在文本文件中只能包含一條SQL語句,而且不能以分號結束

也可以只包含一個PL/SQL塊塊以分號結束

例如:

get C:\Users\Administrator\Desktop\aa list
注意文件名選項LIST和NOLIST位置。

在使用@和get命令時要注意這些格式上的差別。

start命令與@命令是等價的,這里不再贅述。

寫文件涉及的命令包括savespool

其中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 、acceptpause 。

這幾條命令主要用在文本文件中,用來完成靈活的輸入輸出。
prompt命令用來在屏幕上顯示指定的字符串。

這條命令的格式為:

prompt 字符串

注意這里的字符串不需要單引號限定,即使是用空格分開的幾個字樣串。

prompt命令只是簡單地把其后的所有內容在屏幕上顯示。

accept命令的作用是接收用戶的鍵盤輸入,並把用戶輸入的數據存放到指定的變量中,它一般與prompt命令配合使用。
accept命令的格式為:

accept 變量名 變量類型 prompt 提示信息 選項
其中變量名是指存放數據的變量,這個變量不需要要事先定義,可直接使用。

變量類型是指輸入的數據的類型,目前SQL*Plus 只支持數字型字符型日期型數據的輸入。
prompt用來指定在輸入數據時向用戶顯示的提示信息。
選項指定了一些附加的功能,可以使用的選項包括:hidedefault 。
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 的兩個命令來設計的,即TTITLEBTITLE 。

其中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命令用來設計尾部標題,顯示的位置在報表每頁的底部。

報表顯示格式的設計

報表的顯示格式是指報表中數據的顯示格式

有兩條命令用來設計報表的顯示格式,它們是COLUMNBREAK 。
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選項指定數據的顯示格式,主要用來設置字符型數字型日期型數據的格式。

報表中的格式字符串


免責聲明!

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



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