還在用 SQL*Plus 訪問 Oracle?試試更強大的 SQLcl
作者: 不剪發(fā)的Tony老師
畢業(yè)于北京航空航天大學(xué),十多年數(shù)據(jù)庫管理與開發(fā)經(jīng)驗,目前在一家全球性的金融公司從事數(shù)據(jù)庫架構(gòu)設(shè)計。CSDN學(xué)院簽約講師以及GitChat專欄作者。csdn上的博客收藏于以下地址:https://tonydong.blog.csdn.net
文章目錄
主要特性
安裝 SQLcl
連接數(shù)據(jù)庫
使用介紹
查看幫助
內(nèi)置編輯器
命令歷史
命令補全
格式化輸出
相關(guān)鏈接
SQLcl
一直以來,SQL*Plus 都是 Oracle 數(shù)據(jù)庫的標準命令行工具。不過,現(xiàn)在 Oracle 推出了一個新的命令行接口接口工具:Oracle SQL Developer Command Line(SQLcl)。
SQLcl 是一個基于 Java 的免費工具,定位是 SQLPlus 的繼承者。SQLcl 支持交互式或者批量執(zhí)行 SQL和 PL/SQL,提供了行內(nèi)編輯、語句補全、命令歷史等豐富的功能,同時可以調(diào)用 SQLPlus 腳本。
主要特性
內(nèi)置編輯器,在 SQLcl 提示符下交互式編輯多行語句和腳本。
命令歷史,支持循環(huán)存儲 100 個歷史命令/腳本。
命令補全,使用 TAB 鍵自動補全對象名稱或關(guān)鍵字。
新增命令,增加了 SQL*Plus 中不支持的 CTAS、DLL、Repeat、ALIAS、SCRIPT、FORMAT 等許多新的命令。
客戶端腳本,通過 javascript 操作查詢結(jié)果、創(chuàng)建動態(tài)命令、執(zhí)行會話交互等等。
SQL*Plus 支持,支持 SQL*Plus 環(huán)境設(shè)置、命令以及功能。
安裝 SQLcl
SQLcl 基于 Java,只需要有 JRE,不需要安裝 Oracle 客戶端。我們可以登錄 Oracle OTN 直接下載 SQLcl
工具。下載完成后解壓即可,bin 目錄中包含了 Windows 下的可執(zhí)行文件 sql.exe 和 Unix/Linux 下的命令工具 sql。
連接數(shù)據(jù)庫
SQLcl 連接數(shù)據(jù)庫的方式與 SQL*Plus 類似,支持 EZConnect、TNS、LDAP、TWO_TASK 等,注意提前配置好 Java 環(huán)境。以下是 Windows 環(huán)境下使用 EZConnect 連接數(shù)據(jù)庫的示例:
C:\Users\tony>java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
C:\Users\tony>D:\Applications\sqlcl\bin\sql.exe tony/tony@192.168.56.104:1521/orcl
SQLcl: 發(fā)行版 19.1 Production, 發(fā)行日期 星期二 六月 11 10:41:41 2019
版權(quán)所有 (c) 1982, 2019, Oracle。保留所有權(quán)利。
Last Successful login time: 星期二 6月 11 2019 10:41:42 +08:00
已連接到:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> SELECT user FROM dual;
USER
--------------------------------------------------------------------------------
TONY
使用介紹
SQLcl 的使用與 SQL*Plus 非常類似,但是增加了許多新的功能,接下來我們簡單介紹其中幾個主要的特性。
查看幫助
登錄之后,使用HELP命令或者?查看 SQLcl 提供的命令幫助。
其中高亮的部分是 SQLcl 新增加的命令。然后查看某個具體的命令,例如CTAS:
SQL> help ctas;
CTAS
ctas table new_table
使用 DBMS_METADATA 可以提取現(xiàn)有表的 DDL,
然后修改為 create table as select * from
該命令基于已有的表,創(chuàng)建一個生成新表的 DDL 語句,但不執(zhí)行該語句。
內(nèi)置編輯器
對于 SQL*Plus 而言,編輯文件或者 SQL 緩存區(qū)時需要調(diào)用外部的編輯器。SQLcl 為此提供了內(nèi)置的編輯器,使用DEFINE _EDITOR進行設(shè)置:
SQL> define _EDITOR;
DEFINE _EDITOR = "notepad" (CHAR)
SQL> define _EDITOR="inline";
SQL> define _EDITOR;
DEFINE _EDITOR = "inline" (CHAR)
內(nèi)置編輯器支持以下快捷方式:
Ctrl+R - 運行當(dāng)前緩沖區(qū)中的語句
Ctrl+W - 光標移動到緩沖區(qū)頂部
Ctrl+S - 光標移動到緩沖區(qū)底部
Ctrl+A - 光標移動到行首
Ctrl+E - 光標移動到行尾
正在編輯的當(dāng)前行會顯示一個星號(*),同時也可以使用箭頭控制光標的移動,使用刪除鍵和回退鍵刪除內(nèi)容。
命令歷史
使用 SQL*Plus 時,無法訪問已經(jīng)執(zhí)行過的歷史命令,除非安裝 rlwrap。SQLcl 解決了這個問題,查看一下HISTORY命令的幫助:
SQL> help history;
HISTORY
---------
history [<index> | FULL | USAGE | SCRIPT | TIME | CLEAR (SESSION)?]
SQL>history full
1 select 1 from dual;
2 select 2
> from dual;
3 select 3 from dual
> where 1=1;
SQL>history usage
1 (2) select 1 from dual;
2 (11) select 2 from dual;
3 (2) select 3 from dual where 1=1;
SQL>history script
select 1 from dual;
select 2 from dual;
select 3 from dual where 1=1;
SQL>history 3
1 select 3 from dual
2* where 1=1;
SQL>his time
1 clear
2 cl bre
3 (00.201) select 1 from dual
命令幫助給出了參數(shù)和示例。列出某個歷史命令后,輸入斜線(/)即可運行該命令。該功能具有以下特點:
使用向上和向下箭頭依次查看歷史命令。
使用HISTORY命令顯示命令歷史。
默認保存最近 100 個歷史語句。
使用SET HISTORY LIMIT N修改默認保存的歷史命令數(shù)量限制。
命令歷史支持跨 SQLcl 會話保存。
默認情況下,SHOW、HISTORY、CONNECT和SET命令不會保存到歷史中。
SET HISTORY BLACKLIST命令可以用于設(shè)置不想要保存的命令黑名單。
命令補全
SQLcl 支持使用 Tab 鍵補全輸入的功能,可以補全對象名稱和命令,提高輸入的速度。
格式化輸出
SQL*Plus 的默認輸出格式通常顯得比較混亂,需要通過一系列的設(shè)置命令才能顯得比較人性化。SQLcl 預(yù)置了多種常用的輸出格式,包括 CSV、JSON、XML 等。
SQL> help set sqlformat;
SET SQLFORMAT
SET SQLFORMAT { csv,html,xml,json,ansiconsole,insert,loader,fixed,default}
以下分別是默認格式和 CSV 格式的輸出示例:
SQL> SELECT *
2 FROM
3 EMPLOYEES
4* WHERE rownum <= 2;
EMPLOYEE_ID FIRST_NAME LAST_NAME
----------- -------------------- -------------------------
EMAIL PHONE_NUMBER HIRE_DATE JOB_ID SALARY
------------------------- -------------------- --------- ---------- ----------
COMMISSION_PCT MANAGER_ID DEPARTMENT_ID
-------------- ---------- -------------
207 Tony Dong
TonyDong 515.123.8000 15-1月 -10 IT_PROG 8800
102 60
100 Steven King
SKING 515.123.4567 17-6月 -03 AD_PRES 24000
90
SQL> set sqlformat csv;
SQL> SELECT *
2 FROM
3 EMPLOYEES
4* WHERE rownum <= 2;
"EMPLOYEE_ID","FIRST_NAME","LAST_NAME","EMAIL","PHONE_NUMBER","HIRE_DATE","JOB_ID","SALARY","COMMISSION_PCT","MANAGER_ID","DEPARTMENT_ID"
207,"Tony","Dong","TonyDong","515.123.8000",15-1月-10,"IT_PROG",8800,,,102,60
100,"Steven","King","SKING","515.123.4567",17-6月-03,"AD_PRES",24000,,,90
相關(guān)鏈接
官方網(wǎng)址
參考手冊
FAQ