SQL*Plus命令详解:语法、使用方法与综合案例
SQLPlus 是 Oracle 数据库自带的命令行工具,用于执行 SQL 语句、PL/SQL 块以及管理数据库会话。本章将系统讲解 SQLPlus 的核心命令及其使用方法,并提供详细的安装说明、语法解析、注释丰富的示例代码及综合性实战案例。
一、SQL*Plus 安装与配置(以 Windows 和 Linux 为例)
1. 安装前提
- 已安装 Oracle Database(如 Oracle 19c/21c)或 Oracle Instant Client。
- 若仅需连接远程数据库,可只安装 Oracle Instant Client。
2. 安装步骤(Windows)
方法一:通过 Oracle Database 安装包
-
下载 Oracle Database 安装包(如 Oracle 19c for Windows x64)。
-
运行安装程序,选择"桌面类"或"服务器类"。
-
安装完成后,SQL*Plus 自动包含在
%ORACLE_HOME%\bin目录中。 -
配置环境变量:
bashORACLE_HOME = C:\app\oracle\product\19.0.0\dbhome_1 PATH += %ORACLE_HOME%\bin -
打开命令提示符,输入:
bashsqlplus /nolog
方法二:仅安装 Instant Client(轻量级)
-
解压到目录(如
C:\instantclient_19_20)。 -
设置环境变量:
bashPATH = C:\instantclient_19_20 TNS_ADMIN = C:\instantclient_19_20\network\admin # 可选,用于 tnsnames.ora -
创建
tnsnames.ora文件(若使用 TNS 连接):
iniORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orclpdb1) ) ) -
启动 SQL*Plus:
bashsqlplus username/password@ORCL
3. Linux 安装(简要)
bash
# 下载 instantclient-basic-linux.x64-19.x.x.zip
# 和 instantclient-sqlplus-linux.x64-19.x.x.zip
unzip instantclient-basic-linux.x64-19.20.0.0.0dbru.zip
unzip instantclient-sqlplus-linux.x64-19.20.0.0.0dbru.zip
export LD_LIBRARY_PATH=./instantclient_19_20:$LD_LIBRARY_PATH
export PATH=./instantclient_19_20:$PATH
sqlplus user/pass@//localhost:1521/orclpdb1
二、SQL*Plus 与数据库的交互
1. 启动与连接
sql
-- 方式1:启动后连接
sqlplus /nolog
SQL> CONNECT scott/tiger@orcl
-- 方式2:直接连接
sqlplus scott/tiger@orcl
-- 方式3:操作系统认证(需配置)
sqlplus / as sysdba
2. 执行 SQL 与 PL/SQL
sql
-- 执行单条 SQL
SELECT * FROM emp;
-- 执行 PL/SQL 块
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello from PL/SQL!');
END;
/
注意:PL/SQL 块必须以
/结尾才能执行。
三、SET 命令简介与常用设置
SET 命令用于控制 SQL*Plus 的运行环境。
常用 SET 选项
| 选项 | 作用 | 默认值 |
|---|---|---|
PAGESIZE n |
每页显示行数 | 14 |
LINESIZE n |
每行字符数 | 80 |
FEEDBACK ON/OFF |
显示返回行数 | ON |
VERIFY ON/OFF |
显示替换变量前后值 | ON |
ECHO ON/OFF |
显示脚本中的命令 | OFF |
HEADING ON/OFF |
是否显示列标题 | ON |
SERVEROUTPUT ON |
显示 DBMS_OUTPUT 输出 | OFF |
示例:设置查询环境
sql
-- 设置每页50行,每行200字符
SET PAGESIZE 50
SET LINESIZE 200
-- 关闭反馈信息(如 "7 rows selected.")
SET FEEDBACK OFF
-- 开启 DBMS_OUTPUT(用于 PL/SQL 调试)
SET SERVEROUTPUT ON
-- 关闭变量验证(避免重复显示)
SET VERIFY OFF
-- 示例查询
SELECT empno, ename, job FROM emp WHERE deptno = 20;
四、常用 SQL*Plus 命令详解
1. HELP 命令
显示 SQL*Plus 命令帮助。
sql
HELP INDEX -- 列出所有可用命令
HELP SET -- 查看 SET 命令帮助
HELP COLUMN -- 查看 COLUMN 命令帮助
2. DESCRIBE 命令(DESC)
查看表、视图或存储过程的结构。
sql
-- 查看 emp 表结构
DESC emp;
-- 输出示例:
-- Name Null? Type
-- -------- -------- -------------
-- EMPNO NOT NULL NUMBER(4)
-- ENAME VARCHAR2(10)
-- JOB VARCHAR2(9)
-- MGR NUMBER(4)
-- HIREDATE DATE
-- SAL NUMBER(7,2)
-- COMM NUMBER(7,2)
-- DEPTNO NUMBER(2)
3. SPOOL 命令
将屏幕输出保存到文件。
sql
-- 开始记录到 report.txt
SPOOL report.txt
-- 执行查询
SELECT COUNT(*) FROM emp;
SELECT SYSDATE FROM dual;
-- 停止记录并关闭文件
SPOOL OFF
文件默认保存在当前工作目录。
4. 其他常用命令
sql
-- 清屏(仅 Windows/Linux 终端支持)
CLEAR SCREEN
-- 显示当前用户
SHOW USER
-- 显示参数设置
SHOW PAGESIZE
SHOW LINESIZE
-- 退出 SQL*Plus
EXIT 或 QUIT
五、格式化查询结果
1. COLUMN 命令
用于格式化特定列的显示方式。
语法:
sql
COLUMN column_name [option]
常用选项:
FORMAT A<n>:字符型,宽度 nFORMAT 99999:数字型,指定位数HEADING '新标题'JUSTIFY LEFT/RIGHT/CENTERWRAP / WORD_WRAPPED:自动换行
示例:
sql
-- 格式化 emp 表查询输出
COLUMN ename HEADING "Employee Name" FORMAT A15 JUSTIFY CENTER
COLUMN sal HEADING "Salary ($)" FORMAT $99,999.99
COLUMN hiredate HEADING "Hire Date" FORMAT A12
SELECT ename, sal, hiredate FROM emp WHERE deptno = 10;
-- 禁用某列格式
COLUMN ename CLEAR
2. TTITLE 和 BTITLE 命令
设置报表的页眉(Top Title)和页脚(Bottom Title)。
示例:
sql
-- 设置页眉
TTITLE CENTER 'Employee Salary Report' SKIP 2
-- 设置页脚
BTITLE CENTER 'Confidential - Page &PAGE'
-- 执行查询
SELECT ename, job, sal FROM emp ORDER BY sal DESC;
-- 清除标题
TTITLE OFF
BTITLE OFF
&PAGE是 SQL*Plus 内置变量,表示当前页码。
六、综合性实战案例
案例:生成部门工资汇总报告
目标:为 HR 部门生成一份格式化的部门工资汇总报告,包含页眉页脚、列格式、分页控制,并输出到文件。
sql
-- 1. 设置环境
SET PAGESIZE 30
SET LINESIZE 120
SET FEEDBACK OFF
SET VERIFY OFF
SET ECHO OFF
-- 2. 设置标题
TTITLE CENTER 'Department-wise Salary Summary Report' SKIP 1 -
CENTER 'Generated on ' _DATE SKIP 2
BTITLE CENTER 'Page &PAGE of Total Results'
-- 3. 格式化列
COLUMN deptno HEADING "Dept No" FORMAT 999
COLUMN dname HEADING "Department Name" FORMAT A20
COLUMN total_sal HEADING "Total Salary ($)" FORMAT $999,999.99
COLUMN emp_count HEADING "Employees" FORMAT 999
-- 4. 开始输出到文件
SPOOL dept_salary_report.txt
-- 5. 执行汇总查询
SELECT
d.deptno,
d.dname,
COUNT(e.empno) AS emp_count,
SUM(e.sal) AS total_sal
FROM
dept d
LEFT JOIN emp e ON d.deptno = e.deptno
GROUP BY
d.deptno, d.dname
ORDER BY
total_sal DESC NULLS LAST;
-- 6. 结束输出
SPOOL OFF
-- 7. 清理设置
CLEAR COLUMNS
TTITLE OFF
BTITLE OFF
SET FEEDBACK ON
输出效果(dept_salary_report.txt 片段):
Department-wise Salary Summary Report
Generated on 14-JAN-2026
Dept No Department Name Employees Total Salary ($)
------- -------------------- --------- -----------------
20 RESEARCH 5 $10,875.00
30 SALES 6 $9,400.00
10 ACCOUNTING 3 $8,750.00
40 OPERATIONS 0 $.00
Page 1 of Total Results
七、总结
| 功能 | 命令 | 用途 |
|---|---|---|
| 环境设置 | SET |
控制输出格式、反馈等 |
| 结构查看 | DESC |
查看表/对象结构 |
| 输出重定向 | SPOOL |
保存结果到文件 |
| 列格式化 | COLUMN |
美化查询结果 |
| 报表标题 | TTITLE/BTITLE |
添加页眉页脚 |
| 帮助 | HELP |
获取命令帮助 |
掌握这些命令,可大幅提升 SQL*Plus 的使用效率,尤其适用于自动化脚本、报表生成和数据库日常维护。
⚠️ 注意:SQLPlus 是传统工具,现代开发推荐使用 SQL Developer 或 VS Code + Oracle 插件,但 SQLPlus 在脚本自动化和服务器无 GUI 环境中仍不可替代。