PL/SQL模組學習之二、SQL*Plus常用指令
阿新 • • 發佈:2020-03-03
文章目錄
- 1.desc指令使用
- 2.column指令
- 1)FOR[MAT] format
- 2)CLE(AR)
- 3)HEA[DING] text
- 4)JUS[TIFY]{L[EFT]|C[ENTER]|R[IGHT]}
- 5)NEWL(INE)
- 6)NOPRI[NT]|PRI[NT]
- 7)NUL[L] text
- 8)ON|OFF
- 3.run或“/”指令
- 4.L(ist)指令和n指令
- 5.change指令和n(next)指令
- 6.附加(a)指令
- 7.del指令
- 8.set line指令
- 9.spool指令
- 10.指令碼檔案
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