SQL*Plus菜鳥筆記之第五篇

lurou發表於2011-08-29

我們如果執行的命令是PL/SQL blocks(一大片命令),如果你想編輯在SQL Buffer的內容,你可以save出來或者在指令碼里面進行編輯但是如果你覺得麻煩的話,接下來的一些命令可以幫助你。


1、list&change
l m :把buffer中第m行的命令設定為當前行,l為list的簡寫
c/m/n:m為被替換字元,n為替換後字元也就是你想修改成什麼樣子的字元,c為change的簡寫
提示你一個小技巧,如果你這樣寫,c/m,那其實就是刪除m字串,不替換內容,執行的相當於del的效果。
2、新增內容到行末尾
append m:將你想新增的字串m新增到某行的最後,注意append後面跟兩個空格,append可以用簡寫a

3、增加新行
0 m :插入新行m到第一行之前,原第一行順延變成第二行,其他行依次類推。
input m:插入新行m到當前行之後,input可用簡寫i


4、刪除行
del n 刪除第n行
del n m 刪除第n行到m行
del n * 刪除第n到當前行
del n last 刪除第n行到最後一行
del * n 刪除當前行到m行
del * last 刪除當前行到最後一行
del last 刪除最後一行
ps:上面的del全都可以換成list命令。你可以看看效果:)
在sqlplus命令中,只有del和list命令是可對多行進行操作的,其他命令都是單行操作級別的。

5、指令碼註釋方法及注意事項
註釋的三種方法:
REM : 全稱為remark,註釋單行內容,被註釋後的指令碼僅限sqlplus環境使用。
/*.......*/ :標準註釋方法,可註釋多行內容,被註釋後的指令碼具有通用性,推薦使用這個
-- : 註釋單行內容。

注意事項:
5.1 不要在語句的開頭幾個關鍵字中放註釋內容。 因為sqlplus是透過掃描開頭幾個關鍵字來判斷你想執行的命令型別是SQL、PL/SQL bllocks還是sqlplus?避免對sqlplus的判斷有干擾。
5.2 不要再語句結束符號後加註釋,結束符包括".",";","/",一共三種,用引號括起來的。
5.3 不要把分號";"放在行註釋內容中
5.4 不要再註釋內容中使用"&"
給一個針對5.1的例子:

SQL> run
1 /*this just a joke*/
2 SELECT sex_code,sex_name from sex_dict
3 Where sex_code=1
4 /*haha*/
5*
/*this just a joke*/
*
第 1 行出現錯誤:
ORA-24374: 在讀取或執行並讀取之前沒有完成定義


6、執行指令碼
直接使用@或者start即可執行指令碼。例如@/opt/m.sql或者start /opt/m.sql


7、常用的SQLPLUS輸出格式化命令:
a. 執行一個SQL指令碼檔案
SQL>start file_name
SQL>@ file_name
b. 將顯示的內容輸出到指定檔案
SQL> SPOOL file_name
c. 關閉spool輸出
SQL> SPOOL OFF
只有關閉spool輸出,才會在輸出檔案中看到輸出的內容。
d. 改變列的顯示長度.
字元型改變:
SQL> col colname format a40
數值型改變:
SQL> col colname format 99999.99
e. 是否顯示指令碼中正在執行的SQL語句.
SQL> SET ECHO {ON|OFF}
f. 是否顯示當前sql語句查詢或修改的行數.
SQL> SET FEED[BACK] {6|n|ON|OFF}
預設只有結果大於6行時才顯示結果的行數。如果set feedback 1 ,
則不管查詢到多少行都返回。當為off 時,一律不顯示查詢的行數
g. 是否顯示列標題
SQL> SET HEA[DING] {ON|OFF}
當set heading off 時,在每頁的上面不顯示列標題,而是以空白行代替
h. 設定一行可以容納的字元數
SQL> SET LIN[ESIZE] {80|n}
如果一行的輸出內容大於設定的一行可容納的字元數,則折行顯示。
i. 設定頁與頁之間的分隔
SQL> SET NEWP[AGE] {1|n|NONE}
當set newpage 0 時,會在每頁的開頭有一個小的黑方框。
當set newpage n 時,會在頁和頁之間隔著n個空行。
當set newpage none 時,會在頁和頁之間沒有任何間隔。
j. 設定一頁有多少行數
SQL> SET PAGES[IZE] {24|n}
如果設為0,則所有的輸出內容為一頁並且不顯示列標題
k. 是否顯示用DBMS_OUTPUT.PUT_LINE包進行輸出的資訊
SQL> SET SERVEROUT[PUT] {ON|OFF}
這個在shell指令碼中經常使用,預設buffer是256個位元組。
當輸出的大於256時,可以使用SET SERVEROUT on size 1000000;
最大buffer的緩衝區為1000000(9i and 8i)。
l. 當SQL語句的長度大於LINESIZE時,是否在顯示時擷取SQL語句
SQL> SET WRA[P] {ON|OFF}
當輸出的行的長度大於設定的行的長度時(用set linesize n命令設定),
當set wrap on時,輸出行的多於的字元會另起一行顯示,否則,
會將輸出行的多於字元切除,不予顯示。
m. 是否在螢幕上顯示輸出的內容,主要用與SPOOL結合使用
SQL> SET TERM[OUT] {ON|OFF}
在用spool命令將一個大表中的內容輸出到一個檔案中時,
將內容輸出在螢幕上會耗費大量的時間,設定set termspool off後,
則輸出的內容只會儲存在輸出檔案中,不會顯示在螢幕上,
極大的提高了spool的速度。
n. 將SPOOL輸出中每行後面多餘的空格去掉
SQL> SET TRIMS[OUT] {ON|OFF}
o. 顯示每個sql語句花費的執行時間
SQL>set TIMING {ON|OFF}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26006637/viewspace-706153/,如需轉載,請註明出處,否則將追究法律責任。

相關文章