SQL> show error --顯示錯誤
SQL> set heading off --禁止輸出列標題,默認值為ON
SQL> set feedback off --禁止顯示最后一行的計數反饋信息,默認值為"對6個或更多的記錄,回送ON"
SQL> set timing on --默認為OFF,設置查詢耗時,可用來估計SQL語句的執行時間,測試性能
SQL> set sqlprompt "SQL> " --設置默認提示符,默認值就是"SQL> "
SQL> set linesize 1000 --設置屏幕顯示行寬,默認100
SQL> set autocommit ON --設置是否自動提交,默認為OFF
SQL> set pause on --默認為OFF,設置暫停,會使屏幕顯示停止,等待按下ENTER鍵,再顯示下一頁
SQL> set arraysize 1 --默認為15
SQL> set long 1000 --默認為80
說明:
long值默認為80,設置1000是為了顯示更多的內容,因為很多數據字典視圖中用到了long數據類型,如:
SQL> desc user_views
列名 可空值否 類型
------------------------------- -------- ----
VIEW_NAME NOT NULL VARCHAR2(30)
TEXT_LENGTH NUMBER
TEXT LONG
SQL> define a = '''20000101 12:01:01''' --定義局部變量,如果想用一個類似在各種顯示中所包括的回車那樣的常量,
--可以用define命令來設置
SQL> select &a from dual;
原值 1: select &a from dual
新值 1: select '20000101 12:01:01' from dual
'2000010112:01:01
-----------------
20000101 12:01:01
問題提出:
1、用戶需要對數據庫用戶下的每一張表都執行一個相同的SQL操作,這時,一遍、一遍的鍵入SQL語句是很麻煩的
實現方法:
SQL> set heading off --禁止輸出列標題
SQL> set feedback off --禁止顯示最后一行的計數反饋信息
列出當前用戶下所有同義詞的定義,可用來測試同義詞的真實存在性
select 'desc '||tname from tab where tabtype='SYNONYM';
查詢當前用戶下所有表的記錄數
select 'select '''||tname||''',count(*) from '||tname||';' from tab where tabtype='TABLE';
把所有符合條件的表的select權限授予為public
select 'grant select on '||table_name||' to public;' from user_tables where 《條件》;
刪除用戶下各種對象
select 'drop '||tabtype||' '||tname from tab;
刪除符合條件用戶
select 'drop user '||username||' cascade;' from all_users where user_id>25;
快速編譯所有視圖
----當在把數據庫倒入到新的服務器上后(數據庫重建),需要將視圖重新編譯一遍,
----因為該表空間視圖到其它表空間的表的連接會出現問題,可以利用PL/SQL的語言特性,快速編譯。
SQL> SPOOL ON.SQL
SQL> SELECT'ALTER VIEW '||TNAME||' COMPILE;' FROM TAB;
SQL> SPOOL OFF
然后執行ON.SQL即可。
SQL> @ON.SQL
當然,授權和創建同義詞也可以快速進行,如:
SQL> SELECT 'GRANT SELECT ON '||TNAME||' TO 用戶名;' FROM TAB;
SQL> SELECT 'CREATE SYNONYM '||TNAME||' FOR 用戶名.'||TNAME||';' FROM TAB;
命令列表:
假設當前執行命令為:select * from tab;
(a)ppend 添加文本到緩沖區當前行尾 a order by tname 結果:select * from tab order by tname;
(注:a后面跟2個空格)
(c)hange/old/new 在當前行用新的文本替換舊的文本 c/*/tname 結果:select tname from tab;
(c)hange/text 從當前行刪除文本 c/tab 結果:select tname from ;
del 刪除當前行
del n 刪除第n行
(i)nput 文本 在當前行之后添加一行
(l)ist 顯示緩沖區中所有行
(l)ist n 顯示緩沖區中第 n 行
(l)ist m n 顯示緩沖區中 m 到 n 行
run 執行當前緩沖區的命令
/ 執行當前緩沖區的命令
r 執行當前緩沖區的命令
@文件名 運行調入內存的sql文件,如:
SQL> edit s<回車>
如果當前目錄下不存在s.sql文件,則系統自動生成s.sql文件,
在其中輸入"select * from tab;",存盤退出。
SQL> @s<回車>
系統會自動查詢當前用戶下的所有表、視圖、同義詞。
@@文件名 在.sql文件中調用令一個.sql文件時使用
save 文件名 將緩沖區的命令以文件方式存盤,缺省文件擴展名為.sql
get 文件名 調入存盤的sql文件
start 文件名 運行調入內存的sql文件
spool 文件名 把這之后的各種操作及執行結果"假脫機"即存盤到磁盤文件上,默認文件擴展名為.lst
spool 顯示當前的"假脫機"狀態
spool off 停止輸出
例:
SQL> spool a
SQL> spool
正假脫機到 A.LST
SQL> spool off
SQL> spool
當前無假脫機
exit 退出SQL*PLUS
desc 表名 顯示表的結構
show user 顯示當前連接用戶
show error 顯示錯誤
show all 顯示所有68個系統變量值
edit 打開默認編輯器,Windows系統中默認是notepad.exe,把緩沖區中最后一條SQL語句調入afiedt.buf文件中進行編輯
edit 文件名 把當前目錄中指定的.sql文件調入編輯器進行編輯
clear screen 清空當前屏幕顯示
二.Oracle sqlplus語句編輯命令
首先我們輸入這樣一條指令:
SELECT emp_id, emp_name
FROM Employees
input 命令可以接着上一條指令的后面添加語句,比如在上述語句運行后輸入:
input WHERE emp_age > 30
便可得到如下指令:
SELECT emp_id, emp_name
FROM Employees
WHERE emp_age > 30
ln 命令用於指定對以輸入的第n行語句進行操作,比如在上述語句運行后輸入:
l1則當前選中的語句行即為
SELECT emp_id, emp_name
(語句前有"*"表示)
a 命令用於直接在當前行的末尾加上字符,比如在上述語句運行后輸入:
a , emp_dept
則執行的指令變為:
SELECT emp_id, emp_name, emp_dept
FROM Employees
WHERE emp_age > 30
c 命令用於修改當前語句中的字符,比如在上述語句運行后輸入:
c /emp_name/emp_age/則執行的指令變為:
SELECT emp_id, emp_age, emp_dept
FROM Employees
WHERE emp_age > 30
del n 命令用於刪除第n行指令,比如在上述語句運行后輸入:
DEL 3
則執行的指令變為:
SELECT emp_id, emp_age, emp_dept
FROM Employees
我們通常所說的DML、DDL、DCL語句都是sql*plus語句,它們執行完后,都可以保存在一個被稱為sql buffer的內存區域中,並且只能保存一條最近執行的sql語句,我們可以對保存在sql buffer中的sql 語句進行修改,然后再次執行,sql*plus一般都與數據庫打交道。
除了sql*plus語句,在sql*plus中執行的其它語句我們稱之為sql*plus命令。它們執行完后,不保存在sql buffer的內存區域中,它們一般用來對輸出的結果進行格式化顯示,以便於制作報表。
下面就介紹一下一些常用的sql*plus命令:
1. 執行一個SQL腳本文件
SQL>start file_name
SQL>@ file_name
我們可以將多條sql語句保存在一個文本文件中,這樣當要執行這個文件中的所有的sql語句時,用上面的任一命令即可,這類似於dos中的批處理。
@與@@的區別是什么?
@等於start命令,用來運行一個sql腳本文件。
@命令調用當前目錄下的,或指定全路徑,或可以通過SQLPATH環境變量搜尋到的腳本文件。該命令使用是一般要指定要執行的文件的全路徑,否則從缺省路徑(可用SQLPATH變量指定)下讀取指定的文件。
@@用在sql腳本文件中,用來說明用@@執行的sql腳本文件與@@所在的文件在同一目錄下,而不用指定要執行sql腳本文件的全路徑,也不是從SQLPATH環境變量指定的路徑中尋找sql腳本文件,該命令一般用在腳本文件中。
如:在c:\temp目錄下有文件start.sql和nest_start.sql,start.sql腳本文件的內容為:
@@nest_start.sql - - 相當於@ c:\temp\nest_start.sql
則我們在sql*plus中,這樣執行:
SQL> @ c:\temp\start.sql
2. 對當前的輸入進行編輯
SQL>edit
3. 重新運行上一次運行的sql語句
SQL>/
4. 將顯示的內容輸出到指定文件
SQL> SPOOL file_name
在屏幕上的所有內容都包含在該文件中,包括你輸入的sql語句。
5. 關閉spool輸出
SQL> SPOOL OFF
只有關閉spool輸出,才會在輸出文件中看到輸出的內容。
6.顯示一個表的結構
SQL> desc table_name
7. COL命令:
主要格式化列的顯示形式。
該命令有許多選項,具體如下:
COL[UMN] [{ column|expr} [ option ...]]
Option選項可以是如下的子句:
ALI[AS] alias
CLE[AR]
FOLD_A[FTER]
FOLD_B[EFORE]
FOR[MAT] format
HEA[DING] text
JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}
LIKE { expr|alias}
NEWL[INE]
NEW_V[ALUE] variable
NOPRI[NT]|PRI[NT]
NUL[L] text
OLD_V[ALUE] variable
ON|OFF
WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]
1). 改變缺省的列標題
COLUMN column_name HEADING column_heading
For example:
Sql>select * from dept;
DEPTNO DNAME LOC
---------- ---------------------------- ---------
10 ACCOUNTING NEW YORK
sql>col LOC heading location
sql>select * from dept;
DEPTNO DNAME location
--------- ---------------------------- -----------
10 ACCOUNTING NEW YORK
2). 將列名ENAME改為新列名EMPLOYEE NAME並將新列名放在兩行上:
Sql>select * from emp
Department name Salary
---------- ---------- ----------
10 aaa 11
SQL> COLUMN ENAME HEADING ’Employee|Name’
Sql>select * from emp
Employee
Department name Salary
---------- ---------- ----------
10 aaa 11
note: the col heading turn into two lines from one line.
3). 改變列的顯示長度:
FOR[MAT] format
Sql>select empno,ename,job from emp;
EMPNO ENAME JOB
---------- ---------- ---------
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
Sql> col ename format a40
EMPNO ENAME JOB
---------- ---------------------------------------- ---------
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
4). 設置列標題的對齊方式
JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}
SQL> col ename justify center
SQL> /
EMPNO ENAME JOB
---------- ---------------------------------------- ---------
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
對於NUMBER型的列,列標題缺省在右邊,其它類型的列標題缺省在左邊
5). 不讓一個列顯示在屏幕上
NOPRI[NT]|PRI[NT]
SQL> col job noprint
SQL> /
EMPNO ENAME
---------- ----------------------------------------
7369 SMITH
7499 ALLEN
7521 WARD
6). 格式化NUMBER類型列的顯示:
SQL> COLUMN SAL FORMAT $99,990
SQL> /
Employee
Department Name Salary Commission
---------- ---------- --------- ----------
30 ALLEN $1,600 300
7). 顯示列值時,如果列值為NULL值,用text值代替NULL值
COMM NUL[L] text
SQL>COL COMM NUL[L] text
8). 設置一個列的回繞方式
WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]
COL1
--------------------
HOW ARE YOU?
SQL>COL COL1 FORMAT A5
SQL>COL COL1 WRAPPED
COL1
-----
HOW A
RE YO
U?
SQL> COL COL1 WORD_WRAPPED
COL1
-----
HOW
ARE
YOU?
SQL> COL COL1 WORD_WRAPPED
COL1
-----
HOW A
9). 顯示列的當前的顯示屬性值
SQL> COLUMN column_name
10). 將所有列的顯示屬性設為缺省值
SQL> CLEAR COLUMNS
8. 屏蔽掉一個列中顯示的相同的值
BREAK ON break_column
SQL> BREAK ON DEPTNO
SQL> SELECT DEPTNO, ENAME, SAL
FROM EMP
WHERE SAL < 2500
ORDER BY DEPTNO;
DEPTNO ENAME SAL
---------- ----------- ---------
10 CLARK 2450
MILLER 1300
20 SMITH 800
ADAMS 1100
9. 在上面屏蔽掉一個列中顯示的相同的值的顯示中,每當列值變化時在值變化之前插入n個空行。
BREAK ON break_column SKIP n
SQL> BREAK ON DEPTNO SKIP 1
SQL> /
DEPTNO ENAME SAL
---------- ----------- ---------
10 CLARK 2450
MILLER 1300
20 SMITH 800
ADAMS 1100
10. 顯示對BREAK的設置
SQL> BREAK
11. 刪除6、7的設置
SQL> CLEAR BREAKS
12. Set 命令:
該命令包含許多子命令:
SET system_variable value
system_variable value 可以是如下的子句之一:
APPI[NFO]{ON|OFF|text}
ARRAY[SIZE] {15|n}
AUTO[COMMIT]{ON|OFF|IMM[EDIATE]|n}
AUTOP[RINT] {ON|OFF}
AUTORECOVERY [ON|OFF]
AUTOT[RACE] {ON|OFF|TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
BLO[CKTERMINATOR] {.|c}
CMDS[EP] {;|c|ON|OFF}
COLSEP {_|text}
COM[PATIBILITY]{V7|V8|NATIVE}
CON[CAT] {.|c|ON|OFF}
COPYC[OMMIT] {0|n}
COPYTYPECHECK {ON|OFF}
DEF[INE] {&|c|ON|OFF}
DESCRIBE [DEPTH {1|n|ALL}][LINENUM {ON|OFF}][INDENT {ON|OFF}]
ECHO {ON|OFF}
EDITF[ILE] file_name[.ext]
EMB[EDDED] {ON|OFF}
ESC[APE] {\|c|ON|OFF}
FEED[BACK] {6|n|ON|OFF}
FLAGGER {OFF|ENTRY |INTERMED[IATE]|FULL}
FLU[SH] {ON|OFF}
HEA[DING] {ON|OFF}
HEADS[EP] {||c|ON|OFF}
INSTANCE [instance_path|LOCAL]
LIN[ESIZE] {80|n}
LOBOF[FSET] {n|1}
LOGSOURCE [pathname]
LONG {80|n}
LONGC[HUNKSIZE] {80|n}
MARK[UP] HTML [ON|OFF] [HEAD text] [BODY text] [ENTMAP {ON|OFF}] [SPOOL
{ON|OFF}] [PRE[FORMAT] {ON|OFF}]
NEWP[AGE] {1|n|NONE}
NULL text
NUMF[ORMAT] format
NUM[WIDTH] {10|n}
PAGES[IZE] {24|n}
PAU[SE] {ON|OFF|text}
RECSEP {WR[APPED]|EA[CH]|OFF}
RECSEPCHAR {_|c}
SERVEROUT[PUT] {ON|OFF} [SIZE n] [FOR[MAT] {WRA[PPED]|WOR[D_
WRAPPED]|TRU[NCATED]}]
SHIFT[INOUT] {VIS[IBLE]|INV[ISIBLE]}
SHOW[MODE] {ON|OFF}
SQLBL[ANKLINES] {ON|OFF}
SQLC[ASE] {MIX[ED]|LO[WER]|UP[PER]}
SQLCO[NTINUE] {> |text}
SQLN[UMBER] {ON|OFF}
SQLPRE[FIX] {#|c}
SQLP[ROMPT] {SQL>|text}
SQLT[ERMINATOR] {;|c|ON|OFF}
SUF[FIX] {SQL|text}
TAB {ON|OFF}
TERM[OUT] {ON|OFF}
TI[ME] {ON|OFF}
TIMI[NG] {ON|OFF}
TRIM[OUT] {ON|OFF}
TRIMS[POOL] {ON|OFF}
UND[ERLINE] {-|c|ON|OFF}
VER[IFY] {ON|OFF}
WRA[P] {ON|OFF}
1). 設置當前session是否對修改的數據進行自動提交
SQL>SET AUTO[COMMIT] {ON|OFF|IMM[EDIATE]| n}
2).在用start命令執行一個sql腳本時,是否顯示腳本中正在執行的SQL語句
SQL> SET ECHO {ON|OFF}
3).是否顯示當前sql語句查詢或修改的行數
SQL> SET FEED[BACK] {6|n|ON|OFF}
默認只有結果大於6行時才顯示結果的行數。如果set feedback 1 ,則不管查詢到多少行都返回。當為off 時,一律不顯示查詢的行數
4).是否顯示列標題
SQL> SET HEA[DING] {ON|OFF}
當set heading off 時,在每頁的上面不顯示列標題,而是以空白行代替
5).設置一行可以容納的字符數
SQL> SET LIN[ESIZE] {80|n}
如果一行的輸出內容大於設置的一行可容納的字符數,則折行顯示。
6).設置頁與頁之間的分隔
SQL> SET NEWP[AGE] {1|n|NONE}
當set newpage 0 時,會在每頁的開頭有一個小的黑方框。
當set newpage n 時,會在頁和頁之間隔着n個空行。
當set newpage none 時,會在頁和頁之間沒有任何間隔。
7).顯示時,用text值代替NULL值
SQL> SET NULL text
8).設置一頁有多少行數
SQL> SET PAGES[IZE] {24|n}
如果設為0,則所有的輸出內容為一頁並且不顯示列標題
9).是否顯示用DBMS_OUTPUT.PUT_LINE包進行輸出的信息。
SQL> SET SERVEROUT[PUT] {ON|OFF}
在編寫存儲過程時,我們有時會用dbms_output.put_line將必要的信息輸出,以便對存儲過程進行調試,只有將serveroutput變量設為on后,信息才能顯示在屏幕上。
10).當SQL語句的長度大於LINESIZE時,是否在顯示時截取SQL語句。
SQL> SET WRA[P] {ON|OFF}
當輸出的行的長度大於設置的行的長度時(用set linesize n命令設置),當set wrap on時,輸出行的多於的字符會另起一行顯示,否則,會將輸出行的多於字符切除,不予顯示。
11).是否在屏幕上顯示輸出的內容,主要用與SPOOL結合使用。
SQL> SET TERM[OUT] {ON|OFF}
在用spool命令將一個大表中的內容輸出到一個文件中時,將內容輸出在屏幕上會耗費大量的時間,設置set termspool off后,則輸出的內容只會保存在輸出文件中,不會顯示在屏幕上,極大的提高了spool的速度。
12).將SPOOL輸出中每行后面多余的空格去掉
SQL> SET TRIMS[OUT] {ON|OFF}
13)顯示每個sql語句花費的執行時間
set TIMING {ON|OFF}
14). 遇到空行時不認為語句已經結束,從后續行接着讀入。
SET SQLBLANKLINES ON
Sql*plus中, 不允許sql語句中間有空行, 這在從其它地方拷貝腳本到sql*plus中執行時很麻煩. 比如下面的腳本:
select deptno, empno, ename
from emp
where empno = '7788';
如果拷貝到sql*plus中執行, 就會出現錯誤。這個命令可以解決該問題
15).設置DBMS_OUTPUT的輸出
SET SERVEROUTPUT ON BUFFER 20000
用dbms_output.put_line('strin_content');可以在存儲過程中輸出信息,對存儲過程進行調試
如果想讓dbms_output.put_line(' abc');的輸出顯示為:
SQL> abc,而不是SQL>abc,則在SET SERVEROUTPUT ON后加format wrapped參數。
16). 輸出的數據為html格式
set markup html
在8.1.7版本(也許是816? 不太確定)以后, sql*plus中有一個set markup html的命令, 可以將sql*plus的輸出以html格式展現.
注意其中的spool on, 當在屏幕上輸出的時候, 我們看不出與不加spool on有什么區別, 但是當我們使用spool filename 輸出到文件的時候, 會看到spool文件中出現了等tag.
14.修改sql buffer中的當前行中,第一個出現的字符串
C[HANGE] /old_value/new_value
SQL> l
1* select * from dept
SQL> c/dept/emp
1* select * from emp
15.編輯sql buffer中的sql語句
EDI[T]
16.顯示sql buffer中的sql語句,list n顯示sql buffer中的第n行,並使第n行成為當前行
L[IST] [n]
17.在sql buffer的當前行下面加一行或多行
I[NPUT]
18.將指定的文本加到sql buffer的當前行后面
A[PPEND]
SQL> select deptno,
2 dname
3 from dept;
DEPTNO DNAME
---------- --------------
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
SQL> L 2
2* dname
SQL> a ,loc
2* dname,loc
SQL> L
1 select deptno,
2 dname,loc
3* from dept
SQL> /
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
19.將sql buffer中的sql語句保存到一個文件中
SAVE file_name
20.將一個文件中的sql語句導入到sql buffer中
GET file_name
21.再次執行剛才已經執行的sql語句
RUN
or
/
22.執行一個存儲過程
EXECUTE procedure_name
23.在sql*plus中連接到指定的數據庫
CONNECT user_name/passwd@db_alias
24.設置每個報表的頂部標題
TTITLE
25.設置每個報表的尾部標題
BTITLE
26.寫一個注釋
REMARK [text]
27.將指定的信息或一個空行輸出到屏幕上
PROMPT [text]
28.將執行的過程暫停,等待用戶響應后繼續執行
PAUSE [text]
Sql>PAUSE Adjust paper and press RETURN to continue.
29.將一個數據庫中的一些數據拷貝到另外一個數據庫(如將一個表的數據拷貝到另一個數據庫)
COPY {FROM database | TO database | FROM database TO database}
{APPEND|CREATE|INSERT|REPLACE} destination_table
[(column, column, column, ...)] USING query
sql>COPY FROM SCOTT/TIGER@HQ TO JOHN/CHROME@WEST
create emp_temp
USING SELECT * FROM EMP
30.不退出sql*plus,在sql*plus中執行一個操作系統命令:
HOST
Sql> host hostname
該命令在windows下可能被支持。
31.在sql*plus中,切換到操作系統命令提示符下,運行操作系統命令后,可以再次切換回sql*plus:
!
sql>!
$hostname
$exit
sql>
該命令在windows下不被支持。
32.顯示sql*plus命令的幫助
HELP
如何安裝幫助文件:
Sql>@ ?\sqlplus\admin\help\hlpbld.sql ?\sqlplus\admin\help\helpus.sql
Sql>help index
33.顯示sql*plus系統變量的值或sql*plus環境變量的值
Syntax
SHO[W] option
where option represents one of the following terms or clauses:
system_variable
ALL
BTI[TLE]
ERR[ORS] [{FUNCTION|PROCEDURE|PACKAGE|PACKAGE BODY|
TRIGGER|VIEW|TYPE|TYPE BODY} [schema.]name]
LNO
PARAMETERS [parameter_name]
PNO
REL[EASE]
REPF[OOTER]
REPH[EADER]
SGA
SPOO[L]
SQLCODE
TTI[TLE]
USER
1) . 顯示當前環境變量的值:
Show all
2) . 顯示當前在創建函數、存儲過程、觸發器、包等對象的錯誤信息
Show error
當創建一個函數、存儲過程等出錯時,變可以用該命令查看在那個地方出錯及相應的出錯信息,進行修改后再次進行編譯。
3) . 顯示初始化參數的值:
show PARAMETERS [parameter_name]
4) . 顯示數據庫的版本:
show REL[EASE]
5) . 顯示SGA的大小
show SGA
6). 顯示當前的用戶名
show user
34.查詢一個用戶下的對象
SQL>select * from tab;
SQL>select * from user_objects;
35.查詢一個用戶下的所有的表
SQL>select * from user_tables;
36.查詢一個用戶下的所有的索引
SQL>select * from user_indexes;
37. 定義一個用戶變量
方法有兩個:
a. define
b. COL[UMN] [{column|expr} NEW_V[ALUE] variable [NOPRI[NT]|PRI[NT]]
OLD_V[ALUE] variable [NOPRI[NT]|PRI[NT]]
下面對每種方式給予解釋:
a. Syntax
DEF[INE] [variable]|[variable = text]
定義一個用戶變量並且可以分配給它一個CHAR值。
assign the value MANAGER to the variable POS, type:
SQL> DEFINE POS = MANAGER
assign the CHAR value 20 to the variable DEPTNO, type:
SQL> DEFINE DEPTNO = 20
list the definition of DEPTNO, enter
SQL> DEFINE DEPTNO
―――――――――――――――
DEFINE DEPTNO = ”20” (CHAR)
定義了用戶變量POS后,就可以在sql*plus中用&POS或&&POS來引用該變量的值,sql*plus不會再提示你給變量輸入值。
b. COL[UMN] [{column|expr} NEW_V[ALUE] variable [NOPRI[NT]|PRI[NT]]
NEW_V[ALUE] variable
指定一個變量容納查詢出的列值。
例:column col_name new_value var_name noprint
select col_name from table_name where ……..
將下面查詢出的col_name列的值賦給var_name變量.
一個綜合的例子:
得到一個列值的兩次查詢之差(此例為10秒之內共提交了多少事務):
column redo_writes new_value commit_count
select sum(stat.value) redo_writes
from v$sesstat stat, v$statname sn
where stat.statistic# = sn.statistic#
and sn.name = 'user commits';
-- 等待一會兒(此處為10秒);
execute dbms_lock.sleep(10);
set veri off
select sum(stat.value) - &commit_count commits_added
from v$sesstat stat, v$statname sn
where stat.statistic# = sn.statistic#
and sn.name = 'user commits';
38. 定義一個綁定變量
VAR[IABLE] [variable [NUMBER|CHAR|CHAR (n)|NCHAR|NCHAR (n) |VARCHAR2 (n)|NVARCHAR2 (n)|CLOB|NCLOB|REFCURSOR]]
定義一個綁定變量,該變量可以在pl/sql中引用。
可以用print命令顯示該綁定變量的信息。
如:
column inst_num heading "Inst Num" new_value inst_num format 99999;
column inst_name heading "Instance" new_value inst_name format a12;
column db_name heading "DB Name" new_value db_name format a12;
column dbid heading "DB Id" new_value dbid format 9999999999 just c;
prompt
prompt Current Instance
prompt ~~~~~~~~~~~~~~~~
select d.dbid dbid
, d.name db_name
, i.instance_number inst_num
, i.instance_name inst_name
from v$database d,
v$instance i;
variable dbid number;
variable inst_num number;
begin
:dbid := &dbid;
:inst_num := &inst_num;
end;
/
說明:
在sql*plus中,該綁定變量可以作為一個存儲過程的參數,也可以在匿名PL/SQL塊中直接引用。為了顯示用VARIABLE命令創建的綁定變量的值,可以用print命令
注意:
綁定變量不同於變量:
1. 定義方法不同
2. 引用方法不同
綁定變量::variable_name
變量:&variable_name or &&variable_name
3.在sql*plus中,可以定義同名的綁定變量與用戶變量,但是引用的方法不同。
39. &與&&的區別
&用來創建一個臨時變量,每當遇到這個臨時變量時,都會提示你輸入一個值。
&&用來創建一個持久變量,就像用用define命令或帶new_vlaue字句的column命令創建的持久變量一樣。當用&&命令引用這個變量時,不會每次遇到該變量就提示用戶鍵入值,而只是在第一次遇到時提示一次。
如,將下面三行語句存為一個腳本文件,運行該腳本文件,會提示三次,讓輸入deptnoval的值:
select count(*) from emp where deptno = &deptnoval;
select count(*) from emp where deptno = &deptnoval;
select count(*) from emp where deptno = &deptnoval;
將下面三行語句存為一個腳本文件,運行該腳本文件,則只會提示一次,讓輸入deptnoval的值:
select count(*) from emp where deptno = &&deptnoval;
select count(*) from emp where deptno = &&deptnoval;
select count(*) from emp where deptno = &&deptnoval;
40.在輸入sql語句的過程中臨時先運行一個sql*plus命令(摘自www.itpub.com)
#
有沒有過這樣的經歷? 在sql*plus中敲了很長的命令后, 突然發現想不起某個列的名字了, 如果取消當前的命令,待查詢后再重敲, 那太痛苦了. 當然你可以另開一個sql*plus窗口進行查詢, 但這里提供的方法更簡單.
比如說, 你想查工資大於4000的員工的信息, 輸入了下面的語句:
SQL> select deptno, empno, ename
2 from emp
3 where
這時, 你發現你想不起來工資的列名是什么了.
這種情況下, 只要在下一行以#開頭, 就可以執行一條sql*plus命令, 執行完后, 剛才的語句可以繼續輸入
SQL>> select deptno, empno, ename
2 from emp
3 where
6 #desc emp
Name Null? Type
----------------------------------------- -------- --------------
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)
6 sal > 4000;
DEPTNO EMPNO ENAME
---------- ---------- ----------
10 7839 KING
41. SQLPlus中的快速復制和粘貼技巧(摘自www.cnoug.org)
1) 鼠標移至想要復制內容的開始
2) 用右手食指按下鼠標左鍵
3) 向想要復制內容的另一角拖動鼠標,與Word中選取內容的方法一樣
4) 內容選取完畢后(所選內容全部反顯),鼠標左鍵按住不動,用右手中指按鼠標右鍵
5) 這時,所選內容會自動復制到SQL*Plus環境的最后一行
附錄B SQL*PLUS
Sql*plus 中使用綁定變量:
sql> variable x number;
sql> exec :x := 7788;
sql> SELECT empno,ename from scott.emp where empno=:x;
SQL*PLUS 是Oracle提供的一個工具程序,它不僅可以用於測試,運行SQL語句和PL/SQL塊,而且還可以用於管理Oracle數據庫,
1.啟動sql*plus
為了使用sql*plus,必須首先要啟動sql*plus。Oracle不僅提供了命令行和圖形界面的sql*plus,而且還可以在web瀏覽器中
運行.
(1)在命令運行sql*plus
在命令行運行sql*plus是使用sqlplus命令來完成的,該命令適用於任何操作系統平台,
語法如下:
sqlplus [username]/[password][@server]
如上所示:username用於指定數據庫用戶名,password用於指定用戶口令,server則用於指定主機字符串(網絡服務名).
當連接到本地數據時,不需要提供網絡服務名,如果要連接到遠程數據庫,則必須要使用網絡服務名.
(2)在windows環境中運行sql*plus
如果在windows環境中安裝了oralce數據庫產品,那么可以在窗口環境中運行sql*plus
具體方法: "開始->程序->oracle-oradb10g_home1->application development->sql*plus"
2.連接命令
(1)conn[ect]
該命令用於連接到數據庫。注意,使用該命令建立新會話時,會自動斷開先前會話,示例如下:
sql>conn scott/yhai1981@demo
(2)disc[onnect]
該命令用於斷開已經存在的數據庫連接。注:該命令只是斷開連接會話,而不會退出sql*plus,示例如下:
sql>disc
(3)passw[ord]
該命令用於修改用戶的口令。注,任何用戶都可以使用該命令修改其自身口令,但如果要修改其他用戶的口令時,
則必須以DBA身份(sys和system)登錄,在sql*plus中,當修改用戶口令時,可以使用該命令取代sql命令alter user,
示例如下:
sql>passw
更改scott的口令
舊口令:******
新口令:******
重新鍵入新口令:******
口令已更改
sql>
(4)exit
該命令用於退出 sql*plus,另外你也可以使用quit命令退出sql*plus.使用該命令不僅會斷開連接,而且也會退出sql*plus
注:默認情況下,當執行該命令時會自動提交事務。
3,編輯命令
(1)l[ist]
該命令用於列出sql緩沖區的內容,使用該命令可以列出sql緩沖某行,某幾行或所有行的內容。在顯示結果中,數據字為具體
的行號,而"*"則表示當前行。
示例一:列出sql緩沖區所有內容
sql>l
示例二:列出sql緩沖區首行內容:
sql>l1
(2)a[ppend]
該命令用於在sql緩沖區的當前行尾部添加內容。注:該命令將內容追加到標記為"*"的行的尾部,示例如下:
sql>l
1 select empno,ename,sal,hiredate,comm,deptno
2 from emp
3* where deptno=10
sql>a and job='CLERK'
sql>l
SQL> list
1 select empno,ename,sal,hiredate,comm,deptno
2 from emp
3* where deptno=10 and job='CLERK'
(3)c[hange]
該命令用於修改sql緩沖區的內容。如果在編寫sql語句時寫錯了某個詞,那么使用該命令可以進行修改,
sql>select ename from temp where deptno=10;
SQL> c /temp/emp
1* select ename from emp where deptno=10
(4)del
該命令用於刪除sql緩沖區中內容,使用它可以刪除某行,某幾行或所有行,在默認情況下,當直接執行
del時,只刪除當前行的內容,示例如下:
SQL> l
1 select ename
2 from emp
3* where deptno=20
sql>del
SQL> l
1 select ename
2* from emp
如果一次要刪除多行,則指定起始行號和終止行號,例如"del 3 5"
(5)i[nput]
該命令用於在sql緩沖區的當前行后新增加一行。示例如下:
SQL> l
1 select ename
2* from emp
sql>i where deptno=30
如果要在首行前增加內容,則使用"0文本"
sql>0 create table temp as
SQL> l
1 create table temp as
2 select ename
3 from emp
4* where deptno=30
(6) n
該數值用於定位sql緩沖區的當前行,示例如下:
(7)edi[t]
該命令用於編輯sql緩沖區的內容。當運行該命令時,在windows平台中會自動啟動"記事本",以編輯sql緩沖區
(8)run和/
run的/命令都可以用於運行sql緩沖區中的sql語句。注:當使用run命令時,還會列出sql緩沖區內容,eg:
SQL> run
1* select ename from emp where deptno=20
4.文件操縱命令
(1)save
該命令用於將當前sql緩沖區的內容保存到sql腳本中。當執行該命令時,默認選項為create,即建立新文件。
eg:
SQL> save c:/a.sql create
已創建 file c:/a.sql
當執行命令之后,就會建立新腳本文件a.sql,並將sql緩沖區內容存放到該文件中。如果sql已經存在,使用
replace選項可以替撚已存在的sql腳本,如果要給已存在的sql腳本追加內容,可以使用append選項。
(2)get
該命令與save命令作用恰好相反,用於將sql腳本中的所有內容裝載到sql緩沖區中。
eg:
SQL> get c:/a.sql
1* select ename from emp where deptno=20
(3)start和@
start和@命令用於運行sql腳本文件。注:當運行sql腳本文件時,應該指定文件路徑.eg:
SQL> @c:/a.sql
ENAME
----------
SMITH
JONES
SCOTT
ADAMS
FORD
(4)@@
該命令與@命令類似,也可以運行腳本文件,但主要作用是在腳本文件中嵌套調用其它的腳本文件。當使用該命令
嵌套腳本文件時,可在調用文件所在目錄下查找相應文件名。
(5)ed[it]
該命令不僅可用於編輯sql緩沖區內容,也可以用於編輯sql腳本文件。當運行該命令時,會啟動默認的系統編輯
器來編輯sql腳本。運行方法為:
sql>edit c:/a.sql
(6)spool
該命令用於將sql*plus屏幕內容存放到文本文件中。執行該命令時,應首先建立假脫機文件,並將隨后sql*plus
屏幕的所有內容全部存放到該文件中,最后使用spool off命令關閉假脫機文件。eg:
sql>spool c:/a.sql
5.格式命令
sql*plus不僅可以用於執行sql語句、pl/sql塊,而且還可以根據select結果生成報表。使用sql*plus的格式命令
可以控制報表的顯示格式,例如使用column命令可以控制列的顯示格式,使用ttitle命令可以指定頁標題;使用
btitle命令可以指定頁腳注。
(1)col[umn]
該命令用於控制列的顯示格式。column命令包含有四個選項,其中clear選項用於清除已定義列的顯示格式:
heading選項用於指定列的顯示標題;justify選項用於指定列標題的對齊格式(left,center,right);format選項用於
指定列的顯示格式,其中格式模型包含以下一些元素。
An:設置char,varchar2類型列的顯示寬度;
9: 在number類型列上禁止顯示前導0;
0: 在number類型列上強制顯示前導0;
$: 在number類型列前顯示美元符號;
L: 在number類型列前顯示本地貨幣符號;
.: 指定number類型列的小數點位置;
,: 指定number類型列的千分隔符;
eg1:使用column設置列顯示格式
sql>col ename heading 'name' format a10
sql>col sal heading 'sal' format L99999.99
sql>select ename,sal,hiredate from emp
sql>where empno=7788;
name sal HIREDATE
---------- ------------------- -------------------
SCOTT ¥3000.00 04/19/1987 00:00:00
sql>col ename clear
sql>col sal clear
sql>select ename,sal,hiredate from emp
sql>where empno=7788;
(2)title
該命令用於指定頁標題,頁標題會自動顯示在頁的中央。如果頁標題由多個詞組成,則用單引號引住。如果要將頁
標題分布在多行顯示,則用"|"分開不同單詞。如果不希望顯示頁標題,則使用"ttitle off"命令,禁止顯示,eg:
SQL> set linesize 40
SQL> ttitle 'employee report'
SQL> select ename,sal,hiredate from emp where empno=7788;
星期二 5月 20 第 1
employee report
ENAME SAL
---------- ----------
HIREDATE
-------------------
SCOTT 3000
04/19/1987 00:00:00
(3)btitle
該命令用於指定頁腳注,頁腳注會自動顯示在頁的中央。如果頁腳注由多個詞組成,則用單引號引注。如果要將頁腳注
分布在多行顯示,則用"|"分開不同單詞。如果不希望顯示頁腳注,則使用"btitle off"命令,禁止顯示。eg:
SQL> btitle 'page end'
SQL> select ename,sal,hiredate from emp where empno=7788
ENAME SAL
---------- ----------
HIREDATE
-------------------
SCOTT 3000
04/19/1987 00:00:00
page end
(4)break
該命令用於禁止顯示重復行,並將顯示結果分隔為幾個部分,以表現更友好的顯示結果,通常應該在order by 的排序列上
使用該命令。eg:
SQL> set pagesize 40
SQL> break on deptno skip 1
SQL> select deptno,ename,sal from emp order by deptno
2 ;
DEPTNO ENAME SAL
---------- ---------- ----------
10 CLARK 2450
KING 5000
MILLER 1300
20 JONES 2975
FORD 3000
ADAMS 1100
SMITH 800
SCOTT 3000
30 WARD 1250
TURNER 1500
ALLEN 1600
JAMES 950
BLAKE 2850
MARTIN 1250
6.交互式命令
如果經常要執行某些sql語句和sql*plus命令,可以將這些語句和命令存放到sql腳本中。通過使用sql腳本,
一方面可以降低命令輸入量,另一方面可以避免用戶的輸入錯誤。為了使得sql腳本可以根據不同輸入獲得
不同結果,需要在sql腳本中包含交互式命令。通過使用交互式命令,可以在sql*plus中定義變量,並且在運行
sql腳本時可以為這些變量動態輸入數據。下面介紹sql*plus的交互命令,以及引用變量所使用的標號。
(1)&
引用替代變量(substitution variable)時,必須要帶有該標號。如果替代變量已經定義,則會直接使用其數據,
如果替代變量沒有定義,則會臨時定義替代變量(該替代變量只在當前語句中起作用),並需要為其輸入數據。
注:如果替代變量為數字列則提供數據,則可以直接引用;如果替代變量為字符類型列或日期類型列提供數據,
則必須要用單引號引注。eg:
SQL> select ename,sal from emp where deptno=&no and job='&job';
輸入 no 的值: 20
輸入 job 的值: CLERK
原值 1: select ename,sal from emp where deptno=&no and job='&job'
新值 1: select ename,sal from emp where deptno=20 and job='CLERK'
(2)&&
該標號類似於單個&標號。但需要注意,&標號所定義的替代變量只在當前語句中起作用;而&&標號所定義的變量
會在當前sql*plus環境中一直生效。eg:
SQL> select ename,sal from emp where deptno=&&no and job='&&job' --定義了no變量
輸入 no 的值: 20
輸入 job 的值: CLERK
原值 1: select ename,sal from emp where deptno=&&no and job='&&job'
新值 1: select ename,sal from emp where deptno=20 and job='CLERK'
SQL> select ename,sal from emp where deptno=&no;
原值 1: select ename,sal from emp where deptno=&no --直接引用no變量
新值 1: select ename,sal from emp where deptno=20
ENAME SAL
---------- ----------
SMITH 800
JONES 2975
SCOTT 3000
ADAMS 1100
FORD 3000
如例所示,當第一次引用no變量時,使用&&標號需要為其輸入數據;當第二次引用no變量時,
使用&標號直接引用其原有值,而不需要輸入數據。
(3)define
該命令用於定義類型為char的替代變量,而且該命令的定義的替代變量只在當前sql*plus環境中起作用。
當使用該命令定義變量時,如果變量值包含空格或區分大小寫,則用引號引注。另外,使用"define變量名"可以檢查變量
是否已經定義。eg:
sql>set verify off
sql>define title=CLERK
sql>select ename,sal from where job='&title';
(4)accept
該命令可以用於定義char,number和date類型的替代變量。與define命令相比,accept命令更加靈活。當使用該命令定義替代
變量時,還可以指定變量輸入提示、變量輸入格式、隱藏輸入內容。
eg1:指定變量輸入提示
SQL> accept title prompt '請輸入崗位:'
請輸入崗位:CLERK
SQL> select ename,sal from emp where job='&title';
原值 1: select ename,sal from emp where job='&title'
新值 1: select ename,sal from emp where job='CLERK'
ENAME SAL
---------- ----------
SMITH 800
ADAMS 1100
JAMES 950
MILLER 1300
eg2:隱藏用戶輸入
sql>accept pwd hide
(5)undefine
該命令用於清除替代變量的定義。eg:
sql>undefine pwd
SQL> disc
從 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 斷開
SQL> conn scott/&pwd
輸入 pwd 的值: yhai1981
已連接
(6)prompt的pause
prompt命令用於輸出提示信息,而pause命令則用於暫停腳本執行。在sql腳本中結合使用這兩條命令,可以控制sql腳本
的暫停的執行。假定在a.sql腳本中包含以下命令:
prompt '按<Return>鍵繼續'
pause
當運行該sql腳本時,會暫停執行,eg:
sql>@c:/a.sql
'按<Return>鍵繼續'
(7)variable
該命令用於在sql*plus中定義綁定變量。當在sql語句或pl/sql塊中引用綁定變量時,必須要在綁定變量前加冒號(:);
當直接給綁定變量賦值時,需要使用execute命令(類似於調用存儲過程).示例如下:
sql>var no number
sql>exec :no:=7788
sql>select ename from emp where empno=:no;
ename
------------------
scott
(8)print
該命令用於輸出綁定變量結果,eg:
SQL> print no
NO
----------
7788
7.顯示和設置環境變量
使用sql*plus的環境變量可以控制其運行環境,例如設置行顯示寬度,設置每頁顯示的行數、
設置自動提交標記、設置自動跟蹤等等。使用show命令可以顯示當前sql*plus的環境變量設置
:使用set命令可以修改當前sql*plus的環境變量設置。下面介紹常用的sql*plus環境變量。
(1)顯示所有環境變量
為了顯示sql*plus的所有環境變量,必須要使用show all命令。示例如下:
SQL> show all
appinfo 為 OFF 並且已設置為 "SQL*Plus"
arraysize 15
autocommit OFF
autoprint OFF
autorecovery OFF
autotrace OFF
blockterminator "." (hex 2e)
btitle OFF 為下一條 SELECT 語句的前幾個字符
cmdsep OFF
colsep " "
compatibility version NATIVE
concat "." (hex 2e)
copycommit 0
COPYTYPECHECK 為 ON
define "&" (hex 26)
describe DEPTH 1 LINENUM OFF INDENT ON
echo OFF
editfile "afiedt.buf"
embedded OFF
escape OFF
用於 6 或更多行的 FEEDBACK ON
flagger OFF
flush ON
heading ON
headsep "|" (hex 7c)
instance "local"
linesize 80
lno 4
loboffset 1
logsource ""
long 80
longchunksize 80
markup HTML OFF HEAD "<style type='text/css'> body {font:10pt Arial,Helvetica,sans-serif; color:black; background:White;} p {font:10pt Arial,Helvetica,sans-serif; color:black; background:White;} table,tr,td {font:10pt Arial,Helvetica,sans-serif; color:Black; background:#f7f7e7; padding:0px 0px 0px 0px; margin:0px 0px 0px 0px;} th {font:bold 10pt Arial,Helvetica,sans-serif; color:#336699; background:#cccc99; padding:0px 0px 0px 0px;} h1 {font:16pt Arial,Helvetica,Geneva,sans-serif; color:#336699; border-bottom:1px solid #cccc99; margin-top:0pt; margin-bottom:0pt; padding:0px 0px 0px 0px;} h2 {font:bold 10pt Arial,Helvetica,Geneva,sans-serif; color:#336699; background-color:White; margin-top:4pt; margin-bottom:0pt;} a {font:9pt Arial,Helvetica,sans-serif; color:#663300; background:#ffffff; margin-top:0pt; margin-bottom:0pt; vertical-align:top;}</style><title>SQL*Plus Report</title>" BODY "" TABLE "border='1' width='90%' align='center' summary='Script output'" SPOOL OFF ENTMAP ON PREFORMAT OFF
newpage 1
null ""
numformat ""
numwidth 10
pagesize 14
PAUSE 為 OFF
pno 1
recsep WRAP
recsepchar " " (hex 20)
release 1002000100
repfooter OFF 為 NULL
repheader OFF 為 NULL
serveroutput OFF
shiftinout INVISIBLE
showmode OFF
spool ON
sqlblanklines OFF
sqlcase MIXED
sqlcode 0
sqlcontinue "> "
sqlnumber ON
sqlpluscompatibility 10.2.0
sqlprefix "#" (hex 23)
sqlprompt "SQL> "
sqlterminator ";" (hex 3b)
suffix "sql"
tab ON
termout ON
timing OFF
trimout ON
trimspool OFF
ttitle OFF 為下一條 SELECT 語句的前幾個字符
underline "-" (hex 2d)
USER 為 "SCOTT"
verify ON
wrap : 將換至下一行
SQL> spool off
(2)arraysize
該環境變量用於指定數組提取尺寸,其默認值為15.該值越大,網絡開銷將會越低,但占用內存會增加。假定使用默認值,
如果查詢返回行數為50行,則需要通過網絡傳送4將數據;如果設置為25,則網絡傳送次數只有兩次。eg:
SQL> show arraysize
arraysize 15
SQL> set arraysize 25
(3)autocommit
該環境變量用於設置是否自動提交dml語句,其默認值為off(表示禁止自動提交)。當設置為ON時,每次執行DML
語句都會自動提交。eg:
SQL> show autocommit
autocommit OFF
SQL> set autocommit on
SQL> show autocommit
autocommit IMMEDIATE
(4)colsep
該環境變量用於設置列之間的分隔符,默認分隔符為空格。如果要使用其它分隔符,則使用set命令進行設置。eg:
sql>set colsep |
SQL> select ename,sal from emp where empno=7788
ENAME | SAL
----------|----------
SCOTT | 3000
(5)feedback
該環境變量用於指定顯示反饋行數信息的最低行數,其默認值為6。如果要禁止顯示行數反饋信息,則將feedback
設置為off。假設只要有查詢結果就返回行數,那么可以將該環境變量設置為1.eg:
sql>set feedback 1
sql>select ename,sal from emp where empno=7788;
ENAME | SAL
----------|----------
SCOTT | 3000
已選擇 1 行。
(6)heading
該環境變量用於設置是否顯示標題,其默認值為on。如果不顯示列標題,則設置為off。eg:
sql>set heading off
sql>select ename,sal from emp where empno=7788
SCOTT | 3000
(7)linesize
該環境變量用於設置行寬度,默認值為80。在默認情況下,如果數據長度超過80個字符,那么在sql*plus中會折
行顯示數據結果。要在一行中顯示全部數據,應該設置更大的值。eg:
(8)pagesize
該環境變量用於設置每頁所顯示的行數,默認值為14
set pagesize 0; //輸出每頁行數,缺省為24,為了避免分頁,可設定為0。
(9)long
該環境變量用於設置long和lob類型列的顯示長度。默認值為80,也就是說當查詢long或lob列時,只會顯示該列的前80個字符,
應該設置更大的值。eg:
sql>show long
long 80
sql>set long 300
(10)serveroutput
該環境變量用於控制服務器輸出,其默認值為off,表示禁止服務器輸出。在默認情況下,當調用dbms_output包時,
不會在sql*plus屏幕上顯示輸出結果。在調用dbms_output包時,為了在屏幕上輸出結果,必須要將serveroutput設置
為on。eg:
sql>set serveroutput on
sql>exec dbms_output.put_line('hello')
(11)termout
該環境變量用於控制sql腳本的輸出,其默認值為ON。當使用默認值時,如果sql腳本有輸出結果,則會在屏幕上輸出
顯示結果,如果設置為OFF,則不會在屏幕上輸出sql腳本。eg:
SQL> set termout off
SQL> @c:/a
(12)time
該環境變量用於設置在sql提示符前是否顯示系統時間,默認值為off,表示禁止顯示系統時間。如果設置為on,
則在sql提示符前會顯示系統時間.eg:
SQL> set time on
12:09:59 SQL>
(13)timing
該環境變量用於設置是否要顯示sql語句執行時間,默認值為off,表示不會顯示sql語句執行時間。如果設置為
ON,則會顯示sql語句執行時間。eg:
sql>set timing on
SQL> select count(*) from emp;
COUNT(*)
----------
14
已選擇 1 行。
已用時間: 00: 00: 00.03
(14)trimspool
set trimout on; //去除標准輸出每行的拖尾空格,缺省為off
set trimspool on; //去除重定向(spool)輸出每行的拖尾空格,缺省為off
如果trimspool設置為on,將移除spool文件中的尾部空格 ,trimout同trimspool功能相似,只不過對象是控制台。
If trimspool is set to on, it will remove trailing blanks in spooled files.
See also trimout which does the same thing to the output to the console (terminal).
eg:
set trimspool off
spool c:/temp/trimspool.txt
declare
v_name varchar2(30);
begin
SELECT table_name into v_name
FROM all_tables
WHERE rownum =1;
dbms_output.put_line(v_name);
end;
/
set trimspool on
declare
v_name varchar2(30);
begin
SELECT table_name into v_name
FROM all_tables
WHERE rownum =1;
dbms_output.put_line(v_name);
end;
/
spool off
-- from ITPUB
