SQL*Plus基础与脚本编写:生成专业报告的全面指南
立即解锁
发布时间: 2025-08-20 01:15:49 阅读量: 1 订阅数: 4 

### SQL*Plus基础与脚本编写:生成专业报告的全面指南
在数据库管理和数据处理领域,SQL*Plus是一款强大且传统的工具。它不仅能执行SQL查询,还具备丰富的功能来生成高质量的报告。本文将深入介绍SQL*Plus的一些关键特性和命令,帮助你更好地利用它来满足各种数据展示和分析需求。
#### 1. login.sql脚本
在启动SQL*Plus会话时,有一个特殊的脚本会自动执行,那就是`login.sql`。只要该脚本位于启动SQL*Plus的文件夹中,或者可以通过Linux下的`SQLPATH`环境变量或Windows下的注册表设置找到,SQL*Plus就会自动执行它。
此外,还有一个全局的SQL*Plus脚本`glogin.sql`,它会为每个用户执行,适用于多用户环境中设置全局和个人混合的参数。但在单用户的Oracle环境中,同时使用这两个脚本可能会造成混淆。`glogin.sql`通常位于Oracle安装目录下的`sqlplus/admin`子目录中。
从Oracle Database 10g开始,即使在不退出SQL*Plus的情况下执行`CONNECT`命令,SQL*Plus也会执行`glogin.sql`和`login.sql`脚本。
以下是一个`login.sql`脚本的示例:
```sql
-- ===========================================
-- LOGIN.SQL
-- ===========================================
set pause "Enter... "
set pause on
set numwidth 6
set pagesize 24
alter session set nls_date_format='dd-mm-yyyy';
-- define_editor=Notepad /* for Windows */
-- define_editor=vi /* for UNIX or Linux */
clear screen
```
你可以将这个文件保存到正确的位置,然后重新启动SQL*Plus来测试它。
#### 2. 使用SQL*Plus生成报告
SQL语言能让你编写查询并生成结果表,但默认的查询结果布局往往不够美观。SQL*Plus提供了许多命令和功能来将查询结果转换为更易读的报告,以下是一些常用的SQL*Plus功能:
| 功能 | 描述 |
| --- | --- |
| SET {LINESIZE\|PAGESIZE\|NEWPAGE} | 调整页面设置,设置为0可取消页面格式 |
| SET TRIMSPOOL ON | 去除SPOOL输出中的尾随空格 |
| COLUMN | 调整列布局(标题和内容) |
| TTITLE, BTITLE | 定义页面的页眉和页脚 |
| REPHEADER, REPFOOTER | 定义报告的页眉和页脚 |
| BREAK | 对行进行分组(确保结果已正确排序) |
| COMPUTE | 在BREAK定义上添加聚合计算 |
| SPOOL | 将SQL*Plus输出保存到文件 |
#### 3. SQL*Plus COLUMN命令
`COLUMN`命令用于调整列的布局,其一般语法如下:
```sql
SQL> column [<col-name>|<expression>] [<option>...]
```
- 如果不指定任何参数,`COLUMN`命令将显示所有当前列的设置。
- 如果指定`<col-name>`,则只显示该列的设置。注意,`<col-name>`应与`SELECT`子句中的列别名对应,即最终查询结果的列标题。
- 可以使用`<expression>`来影响`SELECT`子句中的表达式,确保从查询中准确复制表达式。
以下是`COLUMN`命令的一些有效选项:
| 选项 | 描述 |
| --- | --- |
| ALI[AS] | 列别名,在BREAK和COMPUTE命令中很有用 |
| CLE[AR] | 重置所有列设置 |
| FOLD_A[FTER] | 在列后插入换行符 |
| FOR[MAT] | 格式化列值的显示 |
| HEA[DING] | 定义不同的列标题用于显示 |
| JUS[TIFY] | 对齐列标题:LEFT、CENTER或CENTRE、RIGHT |
| LIKE | 从另一列复制设置 |
| NEWL[INE] | 在该列前强制换行 |
| NEW_V[ALUE] | 保留最后一列值的替换变量 |
| NO[PRI[NT]] | 隐藏(NOPRINT)或显示(PRINT)特定列 |
| NUL[L] | 显示特定列中的空值 |
| ON \| OFF | 激活/停用列设置 |
| WRA[PPED] | 将过长的列值换行到下一行 |
| WOR[D_WRAPPED] | 将过长的列值按单词拆分换行到下一行 |
| TRU[NCATED] | 截断过长的列值 |
以下是一些使用`COLUMN`命令的示例:
```sql
-- 使用COLUMN FORMAT, HEADING, JUSTIFY, 和LIKE
SQL> select empno, ename, bdate
2 , msal as salary
3 , comm as commission
4 from employees;
SQL> col ename format a20 heading last_name justify center
SQL> col salary format $9999.99
SQL> col commission like salary
SQL> col salary heading month|salary
SQL> /
-- 使用COLUMN NOPRINT, ON, OFF
SQL> col COMM NOPRINT
SQL> select empno, ename, bdate
2 , msal as salary
3 , comm as commission
4 from employees;
SQL> col COMMISSION NOPRINT
SQL> /
SQL> col commission off
SQL> /
SQL> col commission
SQL> col commission on
-- 使用COLUMN NEW_VALUE
SQL> col empno new_value LAST_EMPNO
SQL> /
SQL> def LAST_EMPNO
SQL> I
5 where deptno = 30;
SQL> define LAST_EMPNO
SQL> undefine LAST_EMPNO
```
#### 4. SQL*Plus TTITLE和BTITLE命令
`TTITLE
0
0
复制全文
相关推荐










