天天看點

使用sql*plus編輯sql文本

工作中可能會經常實用工具來編輯sql 文本,實用sql*plus來編輯的機會比較少,但是這些也是硬功夫,一旦有需要手工編輯,其實發現也是很容易的。

關于編輯使用的指令如下,其實看起來一大堆,主要的指令還是增(input)删(del)改(change)查(list),按照這個思路來看就會容易很多,有些指令也是選擇性的使用。

Command

Abbreviation

Purpose

adds text at the end of the current

line

changes old to new in the

current line

deletes text from the current line

(none)

deletes the current line

deletes line n through the current

deletes the current line through line n

adds one or more lines

adds a line consisting of text

lists line n through the current line

lists the current line through line n

最後使用一個執行個體來說明一下,我們有下面的sql語句。

select c from

(select * from

(select 'oracle' cc, level no from dual connect by level

model return updated rows

dimension by (no)

measures (cc c, no n)

rules (

   c[any] = substr(c[cv()],n[cv()],1)

));

我們需要做的就是把它修改成為一個不可運作的結構,然後把它再改回去。

需要修改成如下的樣子,标黃的部分是需要删除的。

可以使用下面的指令來完成。

SQL> select c from

  2  (select * from

  3  (select 'oracle' cc, level no from dual connect by level

  4  model return updated rows

  5  dimension by (no)

  6  measures (cc c, no n)

  7  rules (

  8     c[any] = substr(c[cv()],n[cv()],1)

  9  ));

C

------

o

r

a

c

l

e

6 rows selected.

SQL> del 1                --删除第1行,第2行變成了第1行

SQL> c/(sel/sel          --把第1行的(sel變成sel

  1* select * from

SQL> l                       --列出修改後的語句情況

  1  select * from

  2  (select 'oracle' cc, level no from dual connect by level

  3  model return updated rows

  4  dimension by (no)

  5  measures (cc c, no n)

  6  rules (

  7     c[any] = substr(c[cv()],n[cv()],1)

  8* ))

SQL> del 3             --我們嘗試删除第3行

SQL> l                   --列出修改後的語句情況

  3  dimension by (no)

  4  measures (cc c, no n)

  5  rules (

  6     c[any] = substr(c[cv()],n[cv()],1)

  7* ))

SQL> l last               --列出最後的一行語句

SQL> c/))/)              --把))替換為)

  7* )

SQL> l                     --列出修改後的sql情況

SQL> /                  --這個時候運作,語句按照期望是不能運作的。

          *

ERROR at line 3:

ORA-00933: SQL command not properly ended

我們預期的結果達到了,然後我們需要把結果改回去,讓它可運作。

SQL> 0 select c from                  --我們在第1行前增加一行

SQL> l                                      --列出修改後的sql情況

  1  select c from

  2  select * from

  8* )

SQL> l 1 2                               --列出第1-2行,然後定位在第2行

  2* select * from

SQL> c/sel/(sel                       --把第2行的sel修改為(sel

  2* (select * from

SQL> l                                   --列出修改後的sql情況

SQL> c/)/))                         --把最後1行的)修改為))

SQL> l                               --把修改後的sql語句列出來

SQL> l 3                           --列出第3行的sql 語句

  3* (select 'oracle' cc, level no from dual connect by level

SQL> append model return updated rows  --在第3行後追加一行内容

SQL> l                               --列出修改後的sql語句情況

SQL> /                              --運作sql語句的結果

使用sql*plus所做的修改就這樣完成了,其實很多操作還是可控的,修改的過程是一個互動式的過程,和vi操作略有不同,但是還是比較實用的。