在 Oracle 数据库的世界里,SQL*Plus
是开发和管理工作的标配工具。但随着数据库技术的演进和 AI 能力的嵌入,传统工具已无法满足现代数据开发、智能交互和自动化运维的需求。
Oracle 官方推出的现代化命令行工具 SQLcl(SQL Command Line) 正在取代 SQL*Plus,成为新时代的标准接口,特别是在 AI 与数据库深度融合的背景下,它是目前 唯一原生支持 MCP(Model Context Protocol) 的 CLI 工具。
一、SQL*Plus 的功成身退
SQL*Plus 陪伴 DBA 和开发者几十年,以其稳定和简洁而闻名,但也暴露出诸多局限:
- ❌ 无命令历史、无自动补全
- ❌ 交互体验落后,难以支持现代开发
- ❌ 无法格式化 SQL,无语法高亮
- ❌ 输出格式有限,不支持 JSON、CSV 等
- ❌ 无法与 AI 模型协同工作
随着 Oracle 进入 23ai 时代,这些缺陷愈发明显。
而且细心的你可能已经发现,现在Oracle数据库安装完成后,其实SQLcl工具也已经默认安装了。
二、SQLcl:为现代数据库工作者而生
SQLcl 是 Oracle 官方提供的现代化 SQL 命令行工具,兼容 SQL*Plus 的全部命令,同时引入了丰富的现代特性,需要注意的是,SQLcl工具并非最近才推出,但最近火起来,真正成为 AI 与数据库交互的重要接口工具,是因为其对 MCP(Model Context Protocol) 的支持,至此 SQLcl 迈入了智能化新阶段(当前最新为25.2版本)。
关键功能一览
功能 | SQL*Plus | SQLcl |
---|---|---|
SQL 格式化(format ) |
❌ | ✅ |
命令历史、多行编辑 | ❌ | ✅ |
SQL 高亮 | ❌ | ✅ |
输出格式(JSON/CSV/XML) | ❌ | ✅(set sqlformat ) |
支持 JavaScript 脚本 | ❌ | ✅ |
内建 Liquibase 支持 | ❌ | ✅ |
与 MCP 集成,调用 AI 模型 | ❌ | ✅ |
示例:启动更简单
bash
# 过去(SQL*Plus)
sqlplus / as sysdba
# 现在(SQLcl)
sql / as sysdba
曾经那个调侃入门级DBA,敲完 sqlplus / as sysdba
然后不会了的笑话,如今也可以改成敲完 sql / as sysdba
然后不会了..
嗯,其实还可以敲个help看看丰富的帮助指引 _
可以看到SQLcl的功能实在是太多了,举例一个输出格式的细节示例:
sql
--默认格式,我们直接查询某张表数据:
SQL> select * from countries fetch first 2 rows only;
COUNTRY_ID CO COUNTRY_NAME COUNTRY_SUBREGION COUNTRY_SUBREGION_ID COUNTRY_REGION COUNTRY_REGION_ID COUNTRY_TOTA COUNTRY_TOTAL_ID
---------- -- ---------------------------------------- ------------------------------ -------------------- -------------------- ----------------- ------------ ----------------
52790 US 美国 北美洲 52797 美洲 52801 世界汇总 52806
52776 DE 德国 西欧 52799 欧洲 52803 世界汇总 52806
--通过设置可以支持csv格式,效果如下:
SQL> set sqlformat csv
SQL> select * from countries fetch first 2 rows only;
"COUNTRY_ID","COUNTRY_ISO_CODE","COUNTRY_NAME","COUNTRY_SUBREGION","COUNTRY_SUBREGION_ID","COUNTRY_REGION","COUNTRY_REGION_ID","COUNTRY_TOTAL","COUNTRY_TOTAL_ID"
52790,"US","美国","北美洲",52797,"美洲",52801,"世界汇总",52806
52776,"DE","德国","西欧",52799,"欧洲",52803,"世界汇总",52806
--通过设置可以支持json格式,效果如下:
SQL> set sqlformat json
SQL> select * from countries fetch first 2 rows only;
{"results":[{"columns":[{"name":"COUNTRY_ID","type":"NUMBER"},{"name":"COUNTRY_ISO_CODE","type":"CHAR"},{"name":"COUNTRY_NAME","type":"VARCHAR2"},{"name":"COUNTRY_SUBREGION","type":"VARCHAR2"},{"name":"COUNTRY_SUBREGION_ID","type":"NUMBER"},{"name":"COUNTRY_REGION","type":"VARCHAR2"},{"name":"COUNTRY_REGION_ID","type":"NUMBER"},{"name":"COUNTRY_TOTAL","type":"VARCHAR2"},{"name":"COUNTRY_TOTAL_ID","type":"NUMBER"}],"items":
[
{"country_id":52790,"country_iso_code":"US","country_name":"美国","country_subregion":"北美洲","country_subregion_id":52797,"country_region":"美洲","country_region_id":52801,"country_total":"世界汇总","country_total_id":52806}
,{"country_id":52776,"country_iso_code":"DE","country_name":"德国","country_subregion":"西欧","country_subregion_id":52799,"country_region":"欧洲","country_region_id":52803,"country_total":"世界汇总","country_total_id":52806}
]}]}
--还有更多输出格式可以使用 help set sqlformat 来查看,按需使用
三、让 SQLcl 说"人话":MCP Server 引领自然语言交互
如果说上面的这些功能没能打动你,那么 Oracle SQLcl 的 MCP Server 为与 Oracle 数据库的交互方式带来重大革新,支持直接通过 AI 应用实现自然语言操作。
是的,借助 MCP Server,你可以用自然语言对话方式直接查询Oracle数据、生成报表并执行数据库操作,大幅提升效率与易用性。
目前,SQLcl MCP Server 提供如下工具:
- list-connections:自动发现并列出你电脑上保存的所有 Oracle 数据库连接。
- connect:连接到你指定的数据库连接名称。
- disconnect:断开当前正在使用的 Oracle 数据库连接。
- run-sql:在已连接的数据库上执行标准 SQL 查询和 PL/SQL 代码块。
- run-sqlcl:执行 SQLcl 的专属命令和扩展功能。
另外值得我们注意的是,Oracle基于现有的SQLcl工具,增强开发MCP功能,而不是另起炉灶,这是Oracle比较独特的地方,算是一个关键决策。
这种复用已有 CLI 工具的技术路径,体现了其工程上的务实与产品一致性思维。不仅保护了已有投资,还能快速将 AI 交互能力带入 Oracle 开发者熟悉的工作流中,这是目前其他主流数据库厂商尚未采用的路径。
下面来看我们具体该如何快速体验用起来?
SQLcl需要注意的就是版本要在25.2以上,运行需要依赖JDK环境。
我这里是在mac笔记本上直接安装的SQLcl,直接使用brew安装:
BASH
brew install sqlcl
起初我安装的版本是25.2.0,可还没来及测试就被其他事情耽误了。
BASH
alfredzhao@alfredzhaodeMacBook-Air ~ % sql -V
SQLcl:发行版 25.2.0.0 Production 工作版本:25.2.0.184.2054
等想起来继续测试时,听同事说最开始的版本有些小问题,所以干脆就把之前的版本直接升级到最新25.2.2,避免重复踩坑浪费时间:
BASH
brew upgrade sqlcl
按提示在mac配置新的环境变量:vi ~/.zprofile
export PATH=/opt/homebrew/Caskroom/sqlcl/25.2.2.199.0918/sqlcl/bin:"$PATH"
升级后是这个版本:
BASH
alfredzhao@alfredzhaodeMacBook-Air ~ % sql -V
SQLcl:发行版 25.2.2.0 Production 工作版本:25.2.2.199.0918
配置数据库连接,可以配置多个连接,在国外同事讲的这张片子中,可以看到配置非常灵活:
这些配置都是存在你SQLcl的本地电脑中的,保证了安全性。而且建议不要上来就给高权限用户,避免泄露敏感数据,比如我这里只配置了两个测试数据的连接信息,保证不会读取到关键敏感数据。
测试启动mcp server:
接下来就看MCP Server具体如何在其他工具中配置和使用?
我们选择在 VSCode 中配置 Cline来演示。
为什么选择这种方式?因为这个最流行且最简单,可以直接按照下面这个SQLcl的官方手册,一步步操作即可完成:
文档中详细描述了如何在VSCode中下载安装Cline插件:
如何配置好SQLcl的路径,注意因为我这里升级过SQLcl版本,需要重新修改:
修改为新版本的SQLcl路径:
起初我deepseek欠费了,所以临时用openai兼容的一个免费模型,但总是有问题,后来干脆充值换回deepseek来试,这个deepseek是直接在模型配置列表中存在可以选择的,测试起来就非常顺利。
这里先测试一个简单的业务问题"今年主要产品销售情况",看下表现如何:
使用自然语言提问,最终它也直接使用自然语言返回答复,体验还挺好的。
当我再次提问相同问题,看它在这种情况下是如何反应的?
结果它非常聪明的识别到是相同问题,猜我是想获取更多维度的信息,还直接给我提供了一些维度选择,非常贴心!
当我选择按季度汇总时,就进一步得到了想要的业务结果:
我这里是构建的测试数据,这个方案下的所有数据都可以随便丢给LLM去分析,但我们从这个测试中也可以看到,在惊叹其功能强大的同时,也切身感受到数据安全显得比以往任何时候都重要,就像国外同事的这张片子中描述的,如今这些AI/LLM/MCP技术的应用,实际上进一步凸显了数据安全的重要性。
在这个AI时代,SQLcl 是传统与未来的接点,也是 Oracle DBA 走向智能化世界的桥梁。
附:本文在编写过程中参考的文章和视频
- https://blogs.oracle.com/database/post/introducing-mcp-server-for-oracle-database?source=:so:tw:or:awr:exd:::RC_DEVT250603P00091:ODB23ai&SC=:so:tw:or:awr:exd:::RC_DEVT250603P00091:ODB23ai&pcode=DEVT250603P00091
- https://docs.oracle.com/en/database/oracle/sql-developer-command-line/25.2
- https://youtu.be/hj6WoZVGUBg?si=yveiUlF83oB_BF8U