1. 程式人生 > 資料庫 >PL/SQL模組學習之二、SQL*Plus常用指令

PL/SQL模組學習之二、SQL*Plus常用指令

文章目錄

1.desc指令使用

SQL> alter user scott account unlock;

使用者已更改。 #我用tiger密碼無法登陸,所以需要修改密碼
SQL> alter user scott identified by Password;

使用者已更改。

SQL> conn scott/Password   #connect username/password@sid  使用預設資料庫可不用服務名
已連線。
SQL> desc dept;
 名稱                                      是否為空? 型別
 ----------------------------------------- -------- ----------------------------
 DEPTNO                                    NOT NULL NUMBER(2)
 DNAME                                              VARCHAR2(14)
 LOC                                                VARCHAR2(13)

2.column指令

1)FOR[MAT] format

1.1)格式化模式‘9’ (number)

SQL> select * from salgrade;

    GRADE      LOSAL      HISAL
---------- ---------- ----------
        1        700       1200
        2       1201       1400
        3       1401       2000
        4       2001       3000
        5       3001       9999
#由於3列資料型別均為NUMBER所以使用“9”,99是格式化模式,每個“9”表示一位數字
SQL> col grade for 99 #表示佔用兩位數字的寬度
SQL> col losal for 9999  #表示佔用四位數字的寬度
SQL> col hisal for 9999
SQL> select * from salgrade;

GRADE LOSAL HISAL
----- ----- -----
   1   700  1200
   2  1201  1400
   3  1401  2000
   4  2001  3000
   5  3001  9999
SQL> col hisal for 9999.99 #表示帶小數點
SQL> select * from sAlgrade;

GRADE LOSAL    HISAL
----- ----- --------
   1   700  1200.00
   2  1201  1400.00
   3  1401  2000.00
   4  2001  3000.00
   5  3001  9999.00

1.2)格式化模式‘a’ (字元)

SQL> col object_name for a20 #格式化為20個字元寬度
SQL> select object_name,object_type from user_objects
2  where object_type = 'TABLE';

OBJECT_NAME          OBJECT_TYPE
-------------------- -------------------
BONUS                TABLE
DEPT                 TABLE
EMP                  TABLE
SALGRADE             TABLE

1.3)格式化模式‘$’ (美元)

SQL> col losal for $9999
SQL> col hisal for $9999
SQL> select * from salgrade;

GRADE  LOSAL  HISAL
----- ------ ------
   1   $700  $1200
   2  $1201  $1400
   3  $1401  $2000
   4  $2001  $3000
   5  $3001  $9999

1.4)格式化模式‘L’ (人名幣)

SQL> col losal for L9999
SQL> col hisal for L9999
SQL> select * from salgrade;

GRADE           LOSAL           HISAL
----- --------------- ---------------
    1           ¥700          ¥1200
    2          ¥1201          ¥1400
    3          ¥1401          ¥2000
    4          ¥2001          ¥3000
    5          ¥3001          ¥9999

檢視當前資料庫支援的字符集

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

ZHS16GBK<語言><位元位><編碼>


1.5)檢視列顯示格式

SQL> col losal
COLUMN   losal ON
FORMAT   L9999
SQL> col hisal
COLUMN   hisal ON
FORMAT   L9999

2)CLE(AR)

刪除格式化設定

SQL> col losal clear
SQL> col hisal clear
SQL> col losal
SP2-0046: COLUMN 'losal' 未定義
SQL> col hisal
SP2-0046: COLUMN 'hisal' 未定義

3)HEA[DING] text

格式化列屬性名稱

SQL> col losal heading '低工資'
SQL> col hisal heading '高工資'
SQL> select * from salgrade;

GRADE     低工資     高工資
----- ---------- ----------
   1        700       1200
   2       1201       1400
   3       1401       2000
   4       2001       3000
   5       3001       9999

4)JUS[TIFY]{L[EFT]|C[ENTER]|R[IGHT]}

JUS[TIFY] 靠左 居中 偏右
奇怪的是對我沒用

SQL> col dname jus  center
SQL> col loc jus center
SQL> select * from dept;

   DEPTNO     DNAME           LOC
---------- -------------- -------------
       10 ACCOUNTING     NEW YORK
       20 RESEARCH       DALLAS
       30 SALES          CHICAGO
       40 OPERATIONS     BOSTON

5)NEWL(INE)

使所有列的顯示另起一行 用的少

SQL> col dname newline
SQL> select * from dept;

    DEPTNO
----------
    DNAME           LOC
-------------- -------------
        10
ACCOUNTING     NEW YORK

6)NOPRI[NT]|PRI[NT]

使得格式化的資料不顯示或顯示

SQL> col loc noprint
SQL> col dname clear
SP2-0046: COLUMN 'dname' 未定義
SQL> select * from dept;

   DEPTNO DNAME
---------- --------------
       10 ACCOUNTING
       20 RESEARCH
       30 SALES
       40 OPERATIONS

7)NUL[L] text

SQL> insert into dept (deptno,dname,loc) values (50,'Marcketing','');

已建立 1 行。

SQL> select * from dept;

    DEPTNO DNAME               LOC
---------- -------------- -------------
        50 Marcketing
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> col loc null 'TEMP';
SQL> select * from dept;

    DEPTNO DNAME               LOC
---------- -------------- -------------
        50 Marcketing     TEMP  #填充資料只是顯示,不會修改實際資料
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

8)ON|OFF

OFF後,之前的格式化操作將取消,之後格式化修改將無效
ex: SQL> col loc off

3.run或“/”指令

run或“/”指令可重複執行SQL緩衝區的語句,run會顯示sql語句反饋,“/”不會

SQL> select * from dept;

    DEPTNO DNAME               LOC
---------- -------------- -------------
        50 Marcketing     TEMP
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> run
  1* select * from dept

    DEPTNO DNAME               LOC
---------- -------------- -------------
        50 Marcketing     TEMP
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> /

    DEPTNO DNAME               LOC
---------- -------------- -------------
        50 Marcketing     TEMP
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

4.L(ist)指令和n指令

L(ist)指令列出當前SQL緩衝區的SQL命令

SQL> select empno,ename,job,mgr,hiredate,sal
  2  from emp
  3  where job ='MANAGER';

     EMPNO ENAME      JOB              MGR HIREDATE              SAL
---------- ---------- --------- ---------- -------------- ----------
      7566 JONES      MANAGER         7839 02-4月 -81           2975
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850
      7782 CLARK      MANAGER         7839 09-6月 -81           2450

SQL> list
  1  select empno,sal
  2  from emp
  3* where job ='MANAGER'
SQL> 1 #定位到第一行
  1* select empno,sal

5.change指令和n(next)指令

1) change

前面已經定位到第一行,使用change命令將列sal改為deptno

SQL> ch /sal/deptno
  1* select empno,deptno
SQL> /

     EMPNO ENAME      JOB              MGR HIREDATE           DEPTNO
---------- ---------- --------- ---------- -------------- ----------
      7566 JONES      MANAGER         7839 02-4月 -81             20
      7698 BLAKE      MANAGER         7839 01-5月 -81             30
      7782 CLARK      MANAGER         7839 09-6月 -81             10

2) n

n為SQL語句的行號,隨後輸入替換的行

SQL> list
 1  select empno,deptno
 2  from emp
 3* where job ='MANAGER'
SQL> 1 select empno,mgr
SQL> list
 1  select empno,mgr
 2  from emp
 3* where job ='MANAGER'

6.附加(a)指令

在行末尾新增一些語句或屬性資訊

SQL> list
 1  select empno,mgr
 2  from emp
 3* where job ='MANAGER'
SQL> 1
 1* select empno,mgr
SQL> a,deptno    #將,loc新增到第一行的SQL末尾
 1* select empno,deptno
SQL> list
 1  select empno,deptno
 2  from emp
 3* where job ='MANAGER'

7.del指令

語法格式: del n (n為行號)

SQL> list
  1  select empno,deptno
  2  from emp
  3* where job ='MANAGER'
SQL> del 3
SQL> list
  1  select empno,deptno
  2* from emp

8.set line指令

格式:set line {80/n}
將查詢的資料輸出設定為n個字元寬度顯示,預設80個字元寬度輸出

SQL> list
  1  select empno,deptno
  2* from emp
SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM
---------- ---------- --------- ---------- -------------- ---------- ----------
    DEPTNO
----------
      7369 SMITH      CLERK           7902 17-12月-80            800
        20

      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300

SQL> set line 100#設定顯示行的長度為100個字元
SQL> select * from emp;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-12月-80            800
        20
      7499 ALLEN      SALESMAN        7698 20-2月 -81           1600        300        30
      7521 WARD       SALESMAN        7698 22-2月 -81           1250        500        30

9.spool指令

將使用者輸入的sql語句和查詢結果儲存到指定的檔案中

SQL> show spool
spool OFF
SQL> spool d:\spool_test
SQL> show spool
spool ON
SQL> select empno,sal
  2  from emp
  3  where job = 'MANAGER';

     EMPNO ENAME      JOB              MGR        SAL
---------- ---------- --------- ---------- ----------
      7566 JONES      MANAGER         7839       2975
      7698 BLAKE      MANAGER         7839       2850
      7782 CLARK      MANAGER         7839       2450

SQL> spool off

執行完後在D盤生成了spool_test.lst檔案
在這裡插入圖片描述

10.指令碼檔案

1)建立指令碼檔案

SQL> select empno,sal
 2  from emp
 3  where job = 'MANAGER'
 4  order by sal;

    EMPNO ENAME      JOB              MGR HIREDATE              SAL
---------- ---------- --------- ---------- -------------- ----------
     7782 CLARK      MANAGER         7839 09-6月 -81           2450
     7698 BLAKE      MANAGER         7839 01-5月 -81           2850
     7566 JONES      MANAGER         7839 02-4月 -81           2975
#save命令建立
SQL> save d:\SELECT_emp
已建立 file d:\SELECT_emp.sql

可在D盤找到該檔案
在這裡插入圖片描述

2)執行指令碼檔案

SQL> @d:\SELECT_emp

     EMPNO ENAME      JOB              MGR HIREDATE              SAL
---------- ---------- --------- ---------- -------------- ----------
      7782 CLARK      MANAGER         7839 09-6月 -81           2450
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850
      7566 JONES      MANAGER         7839 02-4月 -81           2975

SQL> start d:\SELECT_tmp
SP2-0310: 無法開啟檔案 "d:\SELECT_tmp.sql"
SQL> start d:\SELECT_emp

     EMPNO ENAME      JOB              MGR HIREDATE              SAL
---------- ---------- --------- ---------- -------------- ----------
      7782 CLARK      MANAGER         7839 09-6月 -81           2450
      7698 BLAKE      MANAGER         7839 01-5月 -81           2850
      7566 JONES      MANAGER         7839 02-4月 -81           2975

3)sqlplus下編輯指令碼檔案

3.1)get裝載到緩衝區後修改

SQL> get d:\SELECT_emp
 1  select empno,sal
 2  from emp
 3  where job = 'MANAGER'
 4* order by sal
SQL> 1
 1* select empno,sal
SQL> change \sal\depno
 1* select empno,depno
SQL> list  #實際指令碼檔案未修改
 1  select empno,depno
 2  from emp
 3  where job = 'MANAGER'
 4* order by sal

3.2)edit呼叫系統編輯軟體修改

在這裡插入圖片描述