知识库✳

教程与手册

全部教程
  1. 01Oracle 函数手册
  2. 02性能优化手册
  3. 03Linux Shell
  4. 04Oracle 学习与演练
  5. 05网络基础学习
  6. 06数据治理与管理
返回个人网站
甲Oracle 学习教程从 SQL 到 PL/SQL 与运维
首页课程目录搜索演练场
知识库

已完成 0 / 22 章

模块一 · 入门与准备

  • 01Oracle 数据库体系结构
  • 02环境安装与连接方式
  • 03SQL*Plus 与常用工具

模块二 · SQL 查询基础

  • 04SELECT 查询基础
  • 05过滤与排序
  • 06单行函数
  • 07多表连接
  • 08分组聚合与 HAVING
  • 09子查询

模块三 · 数据与对象

  • 10DML 与事务控制
  • 11表与数据类型
  • 12约束
  • 13索引与执行计划
  • 14视图、序列与同义词

模块四 · PL/SQL 编程

  • 15PL/SQL 块与变量
  • 16流程控制与游标
  • 17存储过程与函数
  • 18触发器
  • 19异常处理

模块五 · 运维与进阶

  • 20用户与权限管理
  • 21表空间与存储管理
  • 22备份与恢复
❖

Oracle 学习教程

返回个人网站知识库

示例代码基于 Oracle AI Database 26ai / 23ai,查询示例使用官方 HR 示例方案。

以 Next.js 16 · Tailwind CSS v4 · HeroUI v3 装帧

03
  1. 首页
  2. 课程目录
  3. SQL*Plus 与常用工具

第 3 章◆入门◆建议 30 分钟◆模块一 · 入门与准备

SQL*Plus 与常用工具

掌握 SQL*Plus 的格式化命令与脚本化技巧,并了解 SQL Developer、SQLcl、DBeaver 的取舍。

学完这一章,你应该能

  • 会用 SET 命令改善输出格式
  • 理解 SQL 缓冲区与斜杠 / 的执行语义
  • 能写一个可重复执行的 SQL 脚本
  • 知道什么场景该换图形工具

3.1让输出可读

默认的 SQL*Plus 输出经常因为行宽和页高而错乱。开始工作前先设置格式,这是一条值得背下来的习惯。

常用初始化设置
SET LINESIZE 200
-- 每行最多字符数
SET PAGESIZE 100
-- 每页行数;设为 0 会把列标题/页标题一起屏蔽,只想关掉翻页请设大值
SET LONG 20000
-- 长类型(CLOB 等)显示宽度
SET NUMWIDTH 12
-- 数字列宽
SET FEEDBACK ON
-- 显示「已选择 N 行」
SET TIMING ON
-- 显示语句耗时
SET NULL '(null)'
-- 让 NULL 可见

3.2SQL 缓冲区与斜杠

  • SQL*Plus 把最近一条语句存进缓冲区,单独输入 / 表示重新执行
  • 分号 ; 表示「执行」,单独回车只是换行继续输入
  • EDIT 或 ED 可以打开编辑器修改缓冲区内容
  • LIST / 数字 / DEL 可以查看和修改缓冲区特定行
缓冲区操作演示
-- 先输入一条跨行语句,用分号执行
SELECT employee_id, last_name
FROM   employees
WHERE  employee_id = 100;

-- 此时缓冲区里有 4 行
LIST
-- 列出缓冲区所有行及行号
2                           -- 把「当前行」切到第 2 行
c/employees/employees_demo/ -- 替换当前行的内容
/                           -- 从头重新执行整条语句

这一段是交互式操作:LIST、2、c/旧/新/、/ 都必须在 SQL*Plus 提示符下一行一行输入,不能当脚本一次性粘贴执行(批量执行时那个 2 会被当成行号参数而报 SP2 错误)。要点是:n 或 LIST n 定位第 n 行,c/旧/新/ 替换当前行,单独一个 / 重新执行整个缓冲区。

3.3脚本化与变量

要做可重复的查询,应该写成脚本文件,用替换变量接受输入。这是 DBA 日常批量作业的基础。

带参数查询并输出到文件
-- 保存为 dept_report.sql
SET PAGESIZE 50
SET LINESIZE 150
ACCEPT p_dept PROMPT '请输入部门 ID: '

SELECT e.last_name, e.salary, d.department_name
FROM   employees e
JOIN   departments d ON d.department_id = e.department_id
WHERE  e.department_id = &p_dept
ORDER  BY e.salary DESC;

-- 调用
@dept_report.sql
-- 或把结果落盘
SPOOL report.txt
@dept_report.sql
SPOOL OFF

3.4工具怎么选

  • SQL*Plus:所有环境都有,脚本化能力强,运维首选
  • SQLcl:Oracle 官方新命令行工具,支持 JavaScript、历史命令和自动补全
  • SQL Developer:官方免费图形工具,看执行计划、调试 PL/SQL 很方便
  • DBeaver / Navicat:第三方,跨库体验统一,日常写 SQL 更顺手
  • 生产环境做脚本,建议用 SQL*Plus;探索数据结构用图形工具

练习

3 题 · 先自己写,再展开对照

参考答案

SET LINESIZE 200
-- 每行最大字符数
SET PAGESIZE 100
-- 每页行数(设 0 会连列标题一起屏蔽)
SET NUMWIDTH 12
-- 数字列宽
SET LONG 20000
-- CLOB 等长类型显示宽度
SET NULL '(null)'
-- 让 NULL 可见而不是留空
SET FEEDBACK ON
-- 显示「已选择 N 行」
SET TIMING ON
-- 显示语句耗时

自评要点

  • 至少写出 LINESIZE / PAGESIZE 两项
  • 知道 PAGESIZE 0 的副作用不只是取消翻页

参考答案

分号 ; 表示「把当前输入送去执行」。
单独一个 / 表示「重新执行缓冲区里最近的那条语句」,不需要重新输入。

如果上一条语句是 PL/SQL 匿名块,结尾本来就用 / 执行。

自评要点

  • 分号 = 执行当前输入
  • 斜杠 = 重跑缓冲区内容

参考答案

SPOOL report.txt
SELECT last_name, salary FROM employees WHERE department_id = 60;
SPOOL OFF

自评要点

  • SPOOL 文件 → 执行语句 → SPOOL OFF
  • 知道 SPOOL 也能用来导出 CSV
← 上一章

环境安装与连接方式

下一章 →

SELECT 查询基础