sqlplus命令



附錄B SQL*PLUS

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 / quit
 該命令用於退出 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

sql> variable x number;
sql> exec :x := 7788;
sql> SELECT empno,ename from scott.emp where empno=:x;

(8)print
 該命令用於輸出綁定變量結果,eg:
 SQL> print no

       NO
----------
     7788


7.顯示和設置環境變量
使用sql*plus的環境變量可以控制其運行環境,例如設置行顯示寬度,設置每頁顯示的行數、設置自動提交標記、設置自動跟蹤等等。
 使用show命令可以顯示當前sql*plus的環境變量設置
 使用set命令可以修改當前sql*plus的環境變量設置。
下面介紹常用的sql*plus環境變量。
(1)show all 顯示所有環境變量
爲了顯示sql*plus的所有環境變量,必須要使用show all命令。示例如下:
SQL> show all
appinfo 爲 OFF 並且已設置爲 "SQL*Plus"
arraysize 15
  ...

verify ON
wrap : 將換至下一行
(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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章