您的位置:首页 > 数据库 > Oracle

还在用 SQL*Plus 访问 Oracle?试试更强大的 SQLcl

2019-06-11 16:23 3499 查看
版权声明:本站不全为博主原创文章,欢迎转载,转载记得标明出处。^-^ https://blog.csdn.net/horses/article/details/91040331

文章目录

  • 相关链接

  • 一致以来,SQL*Plus 都是 Oracle 数据库的标准命令行工具。不过,现在 Oracle 推出了一个新的命令行接口接口工具:Oracle SQL Developer Command Line(SQLcl)。

    SQLcl 是一个基于 Java 的免费工具,定位是 SQLPlus 的继承者。SQLcl 支持交互式或者批量执行 SQL和 PL/SQL,提供了行内编辑、语句补全、命令历史等丰富的功能,同时可以调用 SQLPlus 脚本。

    主要特性

    • 内置编辑器,在 SQLcl 提示符下交互式编辑多行语句和脚本。
    • 命令历史,支持循环存储 100 个历史命令/脚本。
    • 命令补全,使用 TAB 键自动补全对象名称或关键字。
    • 新增命令,增加了 SQL*Plus 中不支持的 CTAS、DLL、Repeat、ALIAS、SCRIPT、FORMAT 等许多新的命令。
    • 客户端脚本,通过 javascript 操作查询结果、创建动态命令、执行会话交互等等。
    • SQL*Plus 支持,支持 SQL*Plus 环境设置、命令以及功能。

    安装 SQLcl

    SQLcl 基于 Java,只需要有 JRE,不需要安装 Oracle 客户端。我们可以登录 Oracle OTN 直接下载 SQLcl 工具。下载完成后解压即可,bin 目录中包含了 Windows 下的可执行文件 sql.exe 和 Unix/Linux 下的命令工具 sql。

    连接数据库

    SQLcl 连接数据库的方式与 SQL*Plus 类似,支持 EZConnect、TNS、LDAP、TWO_TASK 等,注意提前配置好 Java 环境。以下是 Windows 环境下使用 EZConnect 连接数据库的示例:

    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: 发行版 19.1 Production, 发行日期 星期二 六月 11 10:41:41 2019
    
    版权所有 (c) 1982, 2019, Oracle。保留所有权利。
    
    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 可以提取现有表的 DDL,
    然后修改为 create table as select * from

    该命令基于已有的表,创建一个生成新表的 DDL 语句,但不执行该语句。

    内置编辑器

    对于 SQL*Plus 而言,编辑文件或者 SQL 缓存区时需要调用外部的编辑器。SQLcl 为此提供了内置的编辑器,使用

    DEFINE _EDITOR
    进行设置:

    SQL> define _EDITOR;
    DEFINE _EDITOR         = "notepad" (CHAR)
    
    SQL> define _EDITOR="inline";
    
    SQL> define _EDITOR;
    DEFINE _EDITOR         = "inline" (CHAR)

    内置编辑器支持以下快捷方式:

    • Ctrl+R - 运行当前缓冲区中的语句
    • Ctrl+W - 光标移动到缓冲区顶部
    • Ctrl+S - 光标移动到缓冲区底部
    • Ctrl+A - 光标移动到行首
    • Ctrl+E - 光标移动到行尾

    正在编辑的当前行会显示一个星号(*),同时也可以使用箭头控制光标的移动,使用删除键和回退键删除内容。

    命令历史

    使用 SQL*Plus 时,无法访问已经执行过的历史命令,除非安装 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

    命令帮助给出了参数和示例。列出某个历史命令后,输入斜线(/)即可运行该命令。该功能具有以下特点:

    • 使用向上和向下箭头依次查看历史命令。
    • 使用
      HISTORY
      命令显示命令历史。
    • 默认保存最近 100 个历史语句。
    • 使用
      SET HISTORY LIMIT N
      修改默认保存的历史命令数量限制。
    • 命令历史支持跨 SQLcl 会话保存。
    • 默认情况下,
      SHOW
      HISTORY
      CONNECT
      SET
      命令不会保存到历史中。
    • SET HISTORY BLACKLIST
      命令可以用于设置不想要保存的命令黑名单。

    命令补全

    SQLcl 支持使用 Tab 键补全输入的功能,可以补全对象名称和命令,提高输入的速度。

    格式化输出

    SQL*Plus 的默认输出格式通常显得比较混乱,需要通过一系列的设置命令才能显得比较人性化。SQLcl 预置了多种常用的输出格式,包括 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

    相关链接

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: