標籤:
今天接著昨天的RUN命令繼續講。
3.5 n(設定當前行)命令和A(PPEND)(附加)命令
設想,你輸入了例3-10的查詢語句
例 3-10
SQL> SELECT ename 2 FROM emp;
例 3-10 結果
看到以上輸出時,您發現在SELECT子句中忘了job,sal。這時您又如何修改您的SELECT子句呢?首先您應該使用SQL*PLUS的L(LIST)命令來顯示SQL緩衝中的內容。
例 3-11
SQL> L
例 3-11 結果
在例3-11顯示的結果中,2後面的“*”表示第二行為當前行。從例3-11顯示的結果發現 SELECT ename是SQL緩衝區中的第一行。為了在ename之後添加“,job,sal”您應該把第一行設定為當前行。於是輸入1,如例3-12,該命令把第一行置為當前行。
例 3-12
SQL> 1
例 3-12 結果
例3-12顯示的結果表明已成功將SQL緩衝區第一行設定為當前行。現在就可以使用例3-13的a命令(附加命令)把“,job,sal”添加到SELECT ename之後。
例 3-13
SQL> a,job,sal
例 3-13 結果
此時您應該再使用例3-14的L命令,來檢查您所做的修改是否正確
例 3-14
SQL> L
例 3-14 結果
看到了例3-14顯示的結果,您發現修改後的查詢語句正是您所希望的,於是您再一次輸入執行命令(/或R)來重新運行SQL緩衝區中的查詢語句。這次您就可以得到您所需要的結果了,如例3-15
例 3-15
SQL> R
例 3-15 結果
這與我們輸入SQL語句後立即執行所得的結果完全相同。
用n來指定第n行為當前行,這裡的n為自然數。那麼如果你想在第一行之前插入一行資料,又該怎麼辦呢?可以使用0 text在第一行之前插入一行資料。
如果發現SQL緩衝區中某行的內容需要去掉,又該怎麼處理呢?
3.6 del命令
可以使用del n刪除第n行。如果沒有指定n 就是刪除掉當前行。也可以使用del m,n命令刪除從m行到n行的所有內容。為了示範如何使用這個SQL*PLUS命令,您可以重新輸入與例3-5幾乎一樣的如例3-16的SQL語句。
例 3-16
SQL> SELECT empno,ename,job,sal 2 FROM emp 3 WHERE sal >= 1500 4 ORDER BY job,sal DESC;
為了準確的確定所要刪除的行號,您可以再次使用例3-17的SQL*PLUS命令。
例 3-17
SQL> L
例 3-17 結果
假設emp表是一個很大的表,為了提高查詢的效率,您決定去掉ORDER BY 子句,可以使用例 3-18的SQL*PLUS命令來完成這一決定。
例 3-18
SQL> del 4
現在還是應該使用例3-19的SQL*PLUS的L命令來檢查一下您所做的操作是否成功。
例 3-19
SQL> L
例 3-19 結果
例3-19顯示的結果表名已經成功的刪除了SQL緩衝區中包含ORDE BY 子句的第四行。此時,您可以再次使用例3-20的SQL*PLUS的“/”命令運行該句。
例 3-20
SQL> /
例 3-20 結果
很顯然例3-20顯示的結果是無序的,其易讀性也下降了。但是有時為了系統的整體效率,犧牲一些查詢結果的易讀性也是在所難免。這也就像社會上常說的“犧牲小家為大家”一樣。
在這裡我們並沒有給出del m,n命令和del 命令的例子,因為他們的用法與del m命令大同小異。如果讀者甘心去可以自己試一試就行。
除了以上所介紹的修改和刪除命令之外,還有沒有其他的SQL*PLUS的命令來完成相關的操作呢?
3.7 C(HANGE)命令
也可以使用C(HANGE)/原文/新的命令來修改SQL緩衝區中的語句。是在當前行中用“新的本文”替代“原文”。
為了示範該命令的用法,您可以重新輸入與例3-5完全相同的SQL語句,如例3-21.
例 3-21
SQL> SELECT empno,ename,job,sal 2 FROM dept 3 WHERE sal >= 1500 4 ORDER BY job,sal DESC;
例 3-21 結果
現在試著用剛剛學過的C[HANGE]命令將SQL緩衝區中第二行的dept改為emp,使用了如例2-22的SQL*PLUS命令。
例 3-22
SQL> c /dept/emp
例 3-22 結果
例3-22顯示的結果是您感到意外。因為您有驚人的記憶力,所以堅信您所輸入的SQL*PLUS命令沒有任何錯誤。實際上例3-22的SQL*PLUS命令是完全正確的,只是當前行並不是第二行,即不包含dept,所以才造成了“未找到字串”的錯誤。現在您可以先輸入例3-23的SQL*PLUS命令將SQL緩衝區的中第二行設定為當前行。
例 3-23
SQL> 2
例 3-23 結果
之後可以重新輸入與例2-22完全相同,如例2-24的SQL*PLUS命令。
例 3-24
SQL> c /dept/emp
例 3-24 結果
例3-24顯示的結果表名您已經成功地將SQL緩衝區中第二行的dept修改為emp。但為了謹慎起見,您還是應該使用例3-25的L命令來驗證一下。
例 3-25
SQL> L
例 3-25 結果
如果這時您再使用例3-26 的“/”命令,您就會得到與例3-9完全相同的結果。
例 3-26
SQL> R
例 3-26 結果
如果您想輸出的記過只按工資(sal)由大小排序,您首先應該使用例3-27的SQL*PLUS命令將SQL緩衝區中第四行設定為當前行。
例 3-27
SQL> 4
例 3-27 結果
之後就可以使用例3-28 的C命令將job從SQL緩衝區第四行中刪去。
例 3-28
SQL> C /job,/
例 3-28 結果
現在應該再使用例 3-29的L命令來驗證一下修改是否成功了。
例 3-29
SQL> L
例 3-29 結果
最後您可以使用例3-30的/命令來運行緩衝區中的語句。
例 3-30
SQL> /
例 3-30 結果
從本節的討論可以看出,在某些情況下使用C命令進行修改或者刪除操作可能比使用其他的命令更方便。
3.8 如何產生指令碼
為了示範乘產生指令檔,可以重新輸入例3-31的查詢語句。
例 3-31
SQL> SELECT empno,ename,job,sal 2 FROM emp 3 WHERE sal >= 1500 4 ORDER BY job,sal DESC;
例 3-31 結果
現在您可以輸入如例 3-32的SQL*PLUS的命令,將SQL緩衝區的語句存入D:\SQL\SAMPLE.sql檔案中,該檔案也叫指令檔。
注意:在執行SQL×PLUS命令之前,您要先是用系統命令來建立D:\SQL目錄(問價夾),意思就是SQL*PLUS命令不會自動為您建立不存在的檔案夾。
例 3-32
SQL> SAVE D:\SQL\SAMPLE
例 3-32 結果
SAVE命令把SQL緩衝區的內容存入指定的檔案,這個檔案叫做指令檔。此時如果您使用本文編輯器開啟檔案D:\SQL\SAMPLE.sql,您會在檔案中看到如下內容
例 3-33
測試剮實行SQL×PLUS的L命令,您將會看到您以前輸入的SQL語句不是SQL*PLUS的命令SAVE D:\SQL\SAMPLE。這說明,SQL*PLUS的命令不被存入SQL緩衝區。請看例3-34.
例 3-34
SQL> L
例 3-34 結果
現在如果您輸入例3-35的SQL語句,會發現在SQL緩衝區中會有哪些變化呢?
例 3-35
SQL> SELECT * 2 FROM dept;
例 3-35 結果
之後再發例3-36的SQL*PLUS的L命令,您會發現SQL緩衝區寸的內容已經變為剛才輸入的語句。
例 3-36
SQL> L
例 3-36 結果
以上的例子也證明 了SQl緩衝區只能儲存一個SQL語句。
------------------------------------------分割線---------
今天是周日,多學習一些。^_^
-----------------------------------------------------------
上一篇:oracle學習 第三章 常用的SQL*PLUS命令 ——01
下一篇:
oracle學習 第三章 常用的SQL*PLUS命令 ——02