1. 程式人生 > >Oracle資料庫之SQLPLUS

Oracle資料庫之SQLPLUS

三、SQLPLUS

​ SQLPlus 是 Oracle 資料庫提供的一個專門用於資料庫管理的互動式工具,使用 SQLPlus 可以管理 Oracle 資料庫的所有任務,SQLPlus 通過命令的方式對資料庫進行管理,也可以通過 SQLP lus 執行 SQL 語句的操作。

3.1、SQLPlus設定

​ 如果要想了解 sqlplus 命令,首先要解決一個新的問題:資料問題。

​ 在 Oracle 12C 中由於存在了 CDB 和 PDB 概念,所以所謂的測試資料,預設是找不到的,所以下面必須首先針對資料做一個恢復。

​ 在 D:\app\Oracleuser\product\12.1.0\dbhome_1\RDBMS\ADMIN 目錄之中提供有一個 scott.sql 的建立指令碼,但是這個指令碼需要修改,而且要想會修改肯定要學習完後面的高階內容,所以為了方便學習,這裡提供了一個 c##scott.sql 的檔案,雖然名稱是 c##scott ,本質還是 scott 。

c##scott.sql 指令碼檔案程式碼:

-- 使用超級管理員登入
CONN sys/change_on_install AS SYSDBA ;

-- 建立c##scott使用者
CREATE USER c##scott IDENTIFIED BY tiger ;

-- 為使用者授權
GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO c##scott CONTAINER=ALL ;

-- 設定使用者使用的表空間
ALTER USER c##scott DEFAULT TABLESPACE USERS;
ALTER USER c##scott TEMPORARY TABLESPACE TEMP;

-- 使用c##scott使用者登入
CONNECT c##scott/tiger

-- 刪除資料表
DROP TABLE emp  PURGE ;
DROP TABLE dept PURGE ;
DROP TABLE bonus PURGE ;
DROP TABLE salgrade PURGE ;

-- 建立資料表
CREATE TABLE dept (
deptno NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
dname VARCHAR2(14) ,
loc VARCHAR2(13) ) ;
CREATE TABLE emp (
empno NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT );
CREATE TABLE bonus (
enamE VARCHAR2(10) ,
job VARCHAR2(9)  ,
sal NUMBER,
comm NUMBER ) ;
CREATE TABLE salgrade ( 
grade NUMBER,
losal NUMBER,
hisal NUMBER );

-- 插入測試資料 —— dept
INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO dept VALUES (20,'RESEARCH','DALLAS');
INSERT INTO dept VALUES (30,'SALES','CHICAGO');
INSERT INTO dept VALUES (40,'OPERATIONS','BOSTON');
-- 插入測試資料 —— emp
INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,to_date('19-04-1987','dd-mm-yyyy')-85,3000,NULL,20);
INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,to_date('23-05-1987','dd-mm-yyyy')-51,1100,NULL,20);
INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
-- 插入測試資料 —— salgrade
INSERT INTO salgrade VALUES (1,700,1200);
INSERT INTO salgrade VALUES (2,1201,1400);
INSERT INTO salgrade VALUES (3,1401,2000);
INSERT INTO salgrade VALUES (4,2001,3000);
INSERT INTO salgrade VALUES (5,3001,9999);

-- 事務提交
COMMIT;

​ 如果要想進行資料的配置,那麼執行的順序如下:

1、首先開啟 sqlplus.exe :

​ 執行 -> 輸入:sqlplus /nolog

2、執行 c##scott.sql 檔案(一段一段執行)

​ 開啟視窗 - 屬性 - 選項頁面勾選快速編輯模式 - 顏色頁面可以更改背景及文字顏色。

​ 然後將c##scott.sql 檔案中的程式碼一段一段複製到 sqlplus 裡執行即可。

​ 以上程式執行完畢後,就可以進行後面的命令講解了。

3.2、SQLPlus 常用命令

  • 設定每行顯示的記錄長度:SET LINESIZE 300;

  • 設定每頁顯示的記錄長度:SET PAGESIZE 30;

  • 使用者連線資料庫:CONN 使用者名稱/密碼 [AS SYSDBA];

  • 取得當前使用者的全部資料物件:SELECT * FROM tab;

  • 查看錶結構:DESC 表名稱;

  • 使用本機的作業系統命令:HOST 命令...;

    以上給出的是幾個最為基本的常用操作命令,下面進行詳細介紹。

3.2.1 格式化命令

​ 現在在 c##scott 使用者之中已經存在了相應的資料,開始執行查詢命令:

SELECT * FROM emp;

​ 此表示查詢 emp 表中的全部資料資訊。

​ 可以發現此時的資料顯示出現了折行的問題,資料的分頁也出現問題,如果想要讓資料變得好看一點,首先要解決螢幕的寬度問題:屬性--視窗設定 。或者:

​ 設定每行的資料顯示長度:

SET LINESIZE 300;

​ 設定每頁的顯示資料長度:

SET PAGESIZE 30;

3.2.2 編輯操作

​ 在 sqlplus 之中為了方便使用者編寫很長的 SQL 語句,也專門提供了呼叫本機記事本的命令,可以在終端直接利用 ed 命令完成操作。

ed mldn

​ 此時會直接詢問使用者是否需要建立一個新的 mldn.sql 檔案,開啟記事本後,在文字之中直接編寫之前的資料的查詢命令,儲存退出,隨後可以使用 “ @ ”標記,執行程式,輸入 “ @mldn ”

3.2.3 連線操作

​ 在 Oracle 之中有許多的使用者,這些使用者彼此之間是可以進行互相切換的,而進行切換的基本語法如下:

CONN 使用者名稱/密碼 [AS SYSDBA];

​ 如果使用的是 sys 使用者登入,那麼請加上 AS SYSDBA 的選項

範例:使用 sys 使用者登入

CONN sys change_on_install AS SYSDBA;

​ 連線之後,如果要想知道當前是哪個使用者,可以輸入 “SHOW USER;”

SHOW USER;

​ 而後如果說通過 sys 繼續查詢 c##scott 使用者中的 emp 表,那麼肯定無法查詢,這時必須在表前面加上使用者名稱,即:c##scott.emp;

SELECT * FROM c##scott.emp;

​ 在資料庫原理之中,使用者名稱有時可以被簡單的稱為模式名稱,所以所有的表都是具備模式名稱的,即:模式名.表名稱

​ 如果現在要使用一個普通使用者登入,輸入命令時可以不編寫 SYSDBA.

CONN c##scott tiger;
SELECT * FROM emp;

​ 而且在一個使用者下一定會存在多張資料表,可以用下面命令檢視:

SELECT * FROM tab;

​ 會發現表的格式不規範,可以使用下面命令區域性格式化

COL tname FOR A20;
COL tabtype FOR A20;
COL clusterid FOR A20;
SELECT * FROM tab;

​ 而同樣道理,如果說現在要想知道某些資料表的表結構,那麼可以使用DESC 命令。這是在開發中使用最多的。

範例:檢視 emp 表結構

DESC emp;
  • 在列的型別中主要有以下幾種型別:
    • NUMBER(4): 表示是數字,長度為4
    • VARCHAR2(10): 表示的是字串,只能容納10個長度
    • DATE: 表示日期
      • NUMBER(7,2): 表示的是數字,其中小數位佔2位,整數位佔5位,總共是7位
  • 在 sqlplus 中可以輸入一個 “ / ” 表示重複執行上一條語句的操作。

在 sqlplus 之中除了執行自己的命令之外,也可以呼叫本機作業系統的命令,這時只需要在相關命令前加上 HOST 指令即可。

HOST dir;   
HOST copy d:\mldn.jpg d:\hello.jpg;

3.3、關於原始資料問題(瞭解)

​ 一直強調:現在的 Oracle 12c 中,雖然選擇了要進行樣本資料的建立,不過遺憾的是,發現根本就沒有出現 scott 和 sh 使用者。

​ scott 和 sh 使用者真實存在,現在也在資料庫裡面,可是預設情況下使用者所有操作的資料都儲存在 CDB ,而且這裡面的使用者名稱稱必須以 c## 開頭,如:c##scott。

  • 第一步:需要使用 sys 登入
CONN sys change_on_install AS SYSDBA;
  • 第二步:檢視現在的容器名稱
SHOW con_name;

​ 可以清楚的發現,現在返回的是一個“ CDB$ROOT ”,表示是一個 CDB 容器。

  • 第三步:改變容器為 PDB
ALTER SESSION SET CONTAINER=pdbmldn;
SHOW con_name;
  • 第四步:如果未開啟資料庫,執行命令先開啟
ALTER DATABASE pdbmldn OPEN;

​ 如果現在不是在 PDB 容器之中,那麼還需要在命令上增加一個 PLUGGABLE 。

ALTER PLUGGABLE DATABASE pdbmldn OPEN;

​ 再次查詢,就會發現 scott 和 sh 兩個使用者真實存在了。

  • 第五步:檢視使用者
SELECT username FROM dba_users WHERE username='scott' OR username='sh';
  • 第六步:切換回 CBD

    如果要想切換回 CDB ,只需要重新登入,或者直接輸入切換命令。

ALTER SESSION SET CONTAINER=cdb$root;

3.4、SQL Developer 配置

​ 在 Oracle 的學習之中,SQL Developer 應該算是現在的重點。而這個工具是在 Oracle 11 之後開始為使用者提供的。

​ 1、首先開啟 SQL Developer

​ 開始 -- 所有程式 -- Oracle -- 應用開發工具 -- SQL Developer

​ 這個工具依賴 Java 環境,所以需要進行 Java 相關命令的配置。

​ 2、彈出的視窗中點選 瀏覽,找到以下路徑:

D;\app\oracleuser\produce\12.1.0\dbhome_1\jdk\bin

​ 3、輸入以上路徑後,點選 OK ,稍等

​ 4、彈出 “ 配置檔案型別關聯 ” 視窗,詢問使用者是否需要做檔案關聯,建議別做(也就是都不勾選),點選 確定 後,出現 SQL Developer 介面。

​ 5、如果要想使用此工具,那麼必須建立新的連線,而且為了後續學習方便,建議此處建立兩個連線:

​ 普通使用者( c##scott/tiger )

​ 管理員( sys/change_on_install )

​ 6、點選連線 - 新建連線,彈窗中輸入以下內容:

​ 連線名:SCOTT_Connection

​ 使用者名稱:c##scott

​ 口令:tiger

​ SID:mldn

​ 口令下面勾選 “儲存口令” ,點選 測試 -- 儲存 -- 連線 ,然後工具頁面 “連線” 下會出現 “ SCOTT_Connection ”,點選後在右邊輸入框中輸入:

SELECT * FROM emp;

​ 然後點選執行按鈕(綠色三角形),下面就會以表格形式顯示結果。

​ 7、新建另一個,輸入以下內容:

​ 連線名:DBA_Connection

​ 使用者名稱:sys

​ 口令:change_on_install

​ SID:mldn

​ 口令下面勾選 “儲存口令” ,連線型別選擇 “基本”,角色選擇 “SYSDBA”,點選 測試 -- 儲存 -- 連線 ,然後工具頁面 “連線” 下會出現 “ DBA_Connection ”,此時,管理員連線也建立成功了。

可以發現在 SQL Developer 之中具備了格式化的顯示功能,所以一些 sqlplus 中的格式化命令意義就不大了

3.5、c##scott 使用者表(背)

​ 在以後所講解的資料庫知識之中,c##scott 使用者是主要操作使用者,那麼在這個使用者之中所存在的幾張資料表要清楚(最好背下來)。

​ 僱員表(EMP)

NO. 欄位 型別 描述
1 EMPNO NUMBER(4) <pk> 表示僱員編號,是唯一編號
2 ENAME VARCHAR2(10) 表示僱員姓名
3 JOB VARCHAR2(9) 表示工作單位
4 MGR NUMBER(4) 表示一個僱員的領導編號
5 HIREDATE DATE 表示僱傭日期
6 SAL NUMBER(7,2) 表示月薪、工資
7 COMM NUMBER(7,2) 表示獎金,或者稱為佣金
8 DEPTNO NUMBER(2) <fk> 部門編號
            EMP 表:
EMPNO        NUMBER(4)         <pk>
ENAME        VARCHAR2(10)
JOB              VARCHAR2(9)
MGR             NUMBER(4)
HIREDATE    DATE
SAL               NUMBER(7,2)
COMM          NUMBER(7,2)
DEPTNO       NUMBER(2)         <fk>

​ 部門表(DEPT)

NO. 欄位 型別 描述
1 DEPTNO NUMBER(2) <fk> 部門編號,是唯一編號
2 DNAME VARCHAR2(14) 部門名稱
3 LOC VARCHAR2(13) 部門位置
            DEPT 表:
DEPTNO    NUMBER(2)            <fk>
DNAME     VARCHAR2(14)
LOC           VARCHAR2(13)

​ 獎金錶(BONUS)

NO. 欄位 型別 描述
1 ENAME VARCHAR2(10)
2 JOB VARCHAR2(9)
3 SAL NUMBER
4 COMM NUMBER
            BONUS 表:
ENAME     VARCHAR2(10)
JOB           VARCHAR2(9)
SAL           NUMBER
COMM      NUMBER

​ 工資等級表(SALGRADE)

NO. 欄位 型別 描述
1 GRADE NUMBER 等級名稱
2 LOSAL NUMBER 此等級的最低工資
3 HISAL NUMBER 此等級的最高工資
            SALGRADE 表:
GRADE   NUMBER
LOSAL    NUMBER
HISAL     NUMBER

說明:本學習資料是根據李興華的Oracle開發實戰經典整