還在用 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