本文档风哥主要介绍Oracle SQLcl使用相关知识,包括SQLcl的概念、组件、安装、使用、高级功能等内容,由风哥教程参考Oracle官方文档SQLcl内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 SQLcl概念
Oracle SQLcl是Oracle公司提供的新一代命令行工具,用于替代SQL*Plus。SQLcl基于Java开发,支持JavaScript、支持JSON格式输出、支持多种输出格式,是现代化的Oracle数据库命令行工具。学习交流加群风哥微信: itpux-com
- 现代化命令行工具
- 支持JavaScript
- 支持JSON输出
- 支持多种格式
- 兼容SQL*Plus脚本
1.2 SQLcl组件
SQLcl的主要组件:
- SQL引擎:执行SQL语句
- JavaScript引擎:执行JavaScript代码
- 格式化引擎:格式化输出
- 脚本引擎:执行脚本文件
- 历史记录:命令历史记录
1.3 SQLcl功能
SQLcl的主要功能:
- SQL执行:执行SQL语句
- PL/SQL执行:执行PL/SQL代码
- JavaScript执行:执行JavaScript代码
- 格式化输出:多种输出格式
- 脚本执行:执行脚本文件
Part02-生产环境规划与建议
2.1 SQLcl规划
SQLcl规划要点:
– 开发环境:安装最新版
– 生产环境:评估后使用
– 版本选择:使用最新稳定版
# SQLcl使用规划
– 日常开发:替代SQL*Plus
– 自动化脚本:使用JavaScript
– 数据导出:使用JSON格式
# SQLcl配置规划
– 环境配置:配置Java环境
– 连接配置:保存常用连接
– 格式配置:配置输出格式
2.2 SQLcl设计原则
SQLcl设计原则:
- 现代化:使用现代化功能
- 兼容性:兼容SQL*Plus脚本
- 可扩展:使用JavaScript扩展
- 格式化:使用多种输出格式
- 自动化:自动化脚本开发
2.3 SQLcl策略
SQLcl策略:
- 迁移策略:逐步从SQL*Plus迁移
- 开发策略:新项目使用SQLcl
- 培训策略:培训团队使用SQLcl
Part03-生产环境项目实施方案
3.1 SQLcl安装配置
3.1.1 SQLcl安装
https://www.oracle.com/tools/downloads/sqlcl-downloads.html
# 解压安装
$ unzip sqlcl-xx.x.x.zip -d /opt/
$ cd /opt/sqlcl/bin
# 配置环境变量
$ export PATH=/opt/sqlcl/bin:$PATH
# 验证安装
$ sql -version
SQLcl: Release 23.1.0.0.1 Production
# 连接数据库
$ sql fgedu/xxxxxx@fgeduhost:1521/fgedudb
SQLcl: Release 23.1.0.0.1 Production
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0
SQL>
3.1.2 SQLcl配置
SQL> set sqlformat json
SQL> SELECT * FROM orders WHERE ROWNUM <= 2;
{“results”:[{“columns”:[{“name”:”ORDER_ID”},{“name”:”ORDER_DATE”},
{“name”:”CUSTOMER_ID”},{“name”:”AMOUNT”}],”items”:[
{“order_id”:1001,”order_date”:”2026-04-01T00:00:00″,
“customer_id”:”C001″,”amount”:1000},
{“order_id”:1002,”order_date”:”2026-04-02T00:00:00″,
“customer_id”:”C002″,”amount”:2000}]}]}
# 配置其他格式
SQL> set sqlformat csv
SQL> set sqlformat html
SQL> set sqlformat xml
SQL> set sqlformat ansiconsole
# 配置历史记录
SQL> set history 100
# 查看历史记录
SQL> history
# 使用历史记录
SQL> history 5
3.2 SQLcl使用
3.2.1 SQLcl执行SQL
SQL> SELECT * FROM orders WHERE ROWNUM <= 5;
ORDER_ID ORDER_DAT CUSTOMER_ID AMOUNT
———- ——— ———– ———-
1001 01-APR-26 C001 1000
1002 02-APR-26 C002 2000
1003 03-APR-26 C003 1500
1004 04-APR-26 C004 3000
1005 05-APR-26 C005 2500
# 执行PL/SQL块
SQL> BEGIN
DBMS_OUTPUT.PUT_LINE(‘Hello from SQLcl’);
END;
/
Hello from SQLcl
PL/SQL procedure successfully completed.
# 执行脚本文件
SQL> @/scripts/fgedu_stats.sql
# 使用自动完成
SQL> SEL[TAB]
SQL> SELECT * FR[TAB]
SQL> SELECT * FROM ORD[TAB]
3.2.2 SQLcl使用JavaScript
SQL> /js
> var conn = util.getConnection();
> var stmt = conn.createStatement();
> var rs = stmt.executeQuery(“SELECT * FROM orders WHERE ROWNUM <= 3");
> while (rs.next()) {
print(rs.getString(1) + ” ” + rs.getString(3));
}
1001 C001
1002 C002
1003 C003
# 退出JavaScript模式
> /exit
# 在SQL中嵌入JavaScript
SQL> script
var rs = sql.execute(“SELECT COUNT(*) FROM orders”);
while (rs.next()) {
print(“Total orders: ” + rs.getString(1));
}
/
Total orders: 10000
# 使用JavaScript函数
SQL> script
function formatDate(date) {
return date.getFullYear() + “-” +
(date.getMonth() + 1) + “-” +
date.getDate();
}
print(formatDate(new Date()));
/
2026-4-5
3.3 SQLcl高级功能
3.3.1 SQLcl代码补全
SQL> set autocomplete on
# 使用Tab键补全
SQL> SEL[TAB] -> SELECT
SQL> SELECT * FR[TAB] -> SELECT * FROM
SQL> SELECT * FROM ORD[TAB] -> SELECT * FROM ORDERS
# 查看对象结构
SQL> DESC orders
Name Null? Type
—————————————– ——– —————————-
ORDER_ID NOT NULL NUMBER
ORDER_DATE DATE
CUSTOMER_ID VARCHAR2(10)
AMOUNT NUMBER
# 查看对象DDL
SQL> DDL orders
CREATE TABLE “FGEDU”.”ORDERS”
( “ORDER_ID” NUMBER,
“ORDER_DATE” DATE,
“CUSTOMER_ID” VARCHAR2(10),
“AMOUNT” NUMBER
) ;
3.3.2 SQLcl数据导出
SQL> set sqlformat json
SQL> SPOOL /export/orders.json
SQL> SELECT * FROM orders;
SQL> SPOOL OFF
# 导出为CSV格式
SQL> set sqlformat csv
SQL> SPOOL /export/orders.csv
SQL> SELECT * FROM orders;
SQL> SPOOL OFF
# 导出为HTML格式
SQL> set sqlformat html
SQL> SPOOL /export/orders.html
SQL> SELECT * FROM orders;
SQL> SPOOL OFF
# 使用JavaScript导出
SQL> script
var fs = new java.io.FileOutputStream(“/export/orders.txt”);
var rs = sql.execute(“SELECT * FROM orders”);
while (rs.next()) {
var line = rs.getString(1) + “,” + rs.getString(3) + “\n”;
fs.write(new java.lang.String(line).getBytes());
}
fs.close();
print(“Export completed”);
/
Export completed
Part04-生产案例与实战讲解
4.1 SQLcl常见问题
4.1.1 SQLcl连接失败
# 分析步骤:
# 1. 检查Java版本
$ java -version
java version “11.0.11” 2021-04-20 LTS
# 2. 检查网络连接
$ ping fgeduhost
PING fgeduhost (192.168.1.100): 56 data bytes
# 3. 检查连接字符串
$ sql fgedu/xxxxxx@fgeduhost:1521/fgedudb
# 4. 使用TNS别名
$ sql fgedu/xxxxxx@fgedudb
# 5. 使用Easy Connect
$ sql fgedu/xxxxxx@//fgeduhost:1521/fgedudb
# 6. 使用LDAP
$ sql fgedu/xxxxxx@ldap://ldap.fgedu.net.cn:389/fgedudb,cn=OracleContext
4.2 SQLcl故障排除
# 分析步骤:
# 1. 检查JavaScript语法
SQL> script
var x = 1
print(x)
/
# 2. 启用调试模式
SQL> set jsdebug on
# 3. 查看错误详情
SQL> script
var conn = util.getConnection();
print(conn);
/
# 4. 使用try-catch
SQL> script
try {
var rs = sql.execute(“SELECT * FROM non_exist_table”);
} catch (e) {
print(“Error: ” + e.message);
}
/
Error: ORA-00942: table or view does not exist
4.3 SQLcl优化方案
SQLcl优化方案:
- 配置优化:优化SQLcl配置
- 脚本优化:优化JavaScript脚本
- 格式优化:选择合适的输出格式
- 历史记录:利用历史记录功能
- 自动完成:使用自动完成功能
Part05-风哥经验总结与分享
5.1 SQLcl使用最佳实践
SQLcl使用最佳实践:
- 现代化:使用现代化功能
- JavaScript:使用JavaScript扩展
- 格式化:使用多种输出格式
- 自动完成:使用自动完成功能
- 历史记录:利用历史记录功能
- 脚本开发:开发自动化脚本
5.2 SQLcl检查清单
– [ ] SQLcl已安装
– [ ] Java环境已配置
– [ ] 连接已测试
– [ ] 格式已配置
– [ ] JavaScript已学习
– [ ] 自动完成已使用
– [ ] 历史记录已配置
– [ ] 文档已记录
# SQLcl问题处理流程
1. 发现SQLcl问题
2. 收集SQLcl相关信息
3. 分析SQLcl问题原因
4. 制定处理方案
5. 执行处理方案
6. 验证问题解决
7. 总结经验,优化预防措施
5.3 SQLcl工具推荐
SQLcl常用功能:
- SQL执行:执行SQL语句
- JavaScript:执行JavaScript代码
- 格式化输出:多种输出格式
- 自动完成:代码自动完成
- 历史记录:命令历史记录
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
