菜鸟科技网

SQLPlus set命令有哪些常用参数及作用?

SET 命令简介

SET 命令用于设置 SQLPlus 系统变量(也称为 SET 变量)的值,这些变量决定了 SQLPlus 如何显示查询结果、处理错误、格式化输出等。

SQLPlus set命令有哪些常用参数及作用?-图1
(图片来源网络,侵删)

基本语法:

SET [SYSTEM] {variable_name} {value}
  • SYSTEM (可选): 如果使用 SET SYSTEM,该变量将成为一个会话级的系统变量,对所有 SQL*Plus 脚本都有效,如果不使用 SYSTEM,则变量仅对当前会话(或当前脚本)有效。
  • variable_name: 要设置的变量名。
  • value: 要设置的值。

查看当前所有 SET 变量的值:

SHOW ALL

查看某个特定 SET 变量的值:

SHOW variable_name

常用 SET 命令详解

下面是一些最常用和最重要的 SET 命令,并附有说明和示例。

SQLPlus set命令有哪些常用参数及作用?-图2
(图片来源网络,侵删)

控制输出显示

命令 语法 说明 示例
PAGESIZE SET PAGESIZE {n} 设置每页显示的行数,默认为 14,设置为 0 表示不换页,即所有结果连续输出。 SET PAGESIZE 0 (取消分页)
LINESIZE SET LINESIZE {n} 设置每行的最大字符数,默认是 80,对于宽表,需要设置更大的值以避免换行。 SET LINESIZE 200
LONG SET LONG {n} 控制 LONGCLOB 类型数据的显示长度,默认是 80,查看存储过程、函数的源码时需要设置一个较大的值。 SET LONG 100000
LONGCHUNKSIZE SET LONGCHUNKSIZE {n} 控制每次从数据库获取 LONG 数据的块大小,通常与 SET LONG 配合使用。 SET LONGCHUNKSIZE 8000
HEADING SET HEADING {ON|OFF} 控制是否显示列标题,默认为 ON SET HEADING OFF (不显示列名)
FEEDBACK SET FEEDBACK {n|ON|OFF} 当查询返回 n 行或更多时,显示 "已选择 X 行" 的消息。ON 默认为 6 行,OFF 表示不显示。 SET FEEDBACK 1 (每次查询都显示行数)
NULL SET NULL {text} 当查询结果为 NULL 时,显示指定的文本,默认为空字符串。 SET NULL 'NULL值'

控制格式化和布局

命令 语法 说明 示例
TIMING SET TIMING {ON|OFF} 显示每条 SQL 语句执行的耗时,对性能分析非常有用,默认为 OFF SET TIMING ON
ARRAYSIZE SET ARRAYSIZE {n} 设置 SQL*Plus 一次从数据库获取的行数,值越大,网络往返次数越少,但内存占用也越大,默认为 15。 SET ARRAYSIZE 50
PAUSE SET PAUSE {ON|OFF|text} ON 时,每次输出一屏后暂停,并显示 "按回车键继续...",可以自定义提示文本。 SET PAUSE ON
PNO SET PNO {ON|OFF} 控制是否在每页的顶部显示页码,默认为 ON SET PNO OFF

控制编辑和脚本行为

命令 语法 说明 示例
ECHO SET ECHO {ON|OFF} 控制是否在运行脚本时显示脚本本身的内容,默认为 OFF,调试脚本时非常有用。 SET ECHO ON
VERIFY SET VERIFY {ON|OFF} 控制是否显示用 &&& 定义的替换变量的值,默认为 ON SET VERIFY OFF (不显示变量替换过程)
SCAN SET SCAN {ON|OFF} 控制是否对输入的脚本进行 & 替换,默认为 ON,如果要在脚本中输入 & 字符本身,可以设置为 OFF SET SCAN OFF
TERMOUT SET TERMOUT {ON|OFF} 控制是否将脚本的输出显示到屏幕上,设置为 OFF 时,脚本仍然会执行,只是你看不到结果,常用于将输出重定向到文件。 SET TERMOUT OFF
SERVEROUTPUT SET SERVEROUTPUT {ON|OFF} [SIZE {n|UNLIMITED}] [FORMAT {WRAP|TRUNC}] 控制是否显示数据库包(如 DBMS_OUTPUT)的输出信息,开发 PL/SQL 时必备。 SET SERVEROUTPUT ON SIZE 1000000

控制错误和事务处理

命令 语法 说明 示例
SQLPLUSCOMPATIBILITY SET SQLPLUSCOMPATIBILITY {version} 设置 SQL*Plus 的行为与哪个 Oracle 数据库版本兼容,可以设置为 00 SET SQLPLUSCOMPATIBILITY 11.0
SQLBLANKLINES SET SQLBLANKLINES {ON|OFF} 允许 SQL 语句中包含空行,默认为 OFF SET SQLBLANKLINES ON
DEFINER SET DEFINER {USER|CURRENT_USER} 在创建视图或同义词时,指定使用哪个用户的权限。 SET DEFINER CURRENT_USER

实践示例

假设我们有一个表 EMPLOYEES,并且我们想以一个美观、信息完整的格式查看它。

默认情况下的输出

SQL> SELECT * FROM EMPLOYEES WHERE ROWNUM < 10;

输出可能分页、列宽不够、显示 "已选择 X 行" 等信息,可能不够直观。

优化后的查询环境

SQLPlus set命令有哪些常用参数及作用?-图3
(图片来源网络,侵删)

我们可以先设置一组 SET 命令来优化输出:

-- 1. 设置行宽和页长,避免内容被截断和分页
SQL> SET LINESIZE 200
SQL> SET PAGESIZE 0
-- 2. 关闭不必要的输出信息,让结果更清爽
SQL> SET HEADING OFF
SQL> SET FEEDBACK OFF
SQL> SET PNO OFF
-- 3. 如果有LONG类型数据,需要设置
SQL> SET LONG 1000000
-- 4. 现在执行查询
SQL> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, HIRE_DATE FROM EMPLOYEES WHERE ROWNUM < 10;

输出会是一个连续的、没有列标题、没有行数提示的干净表格。

在脚本文件中应用

这些 SET 命令会放在 SQL 脚本的开头,以确保脚本在任何环境下都能以期望的方式运行。

-- script.sql
SET ECHO ON
SET LINESIZE 200
SET PAGESIZE 0
SET HEADING ON
SET FEEDBACK ON
SET SERVEROUTPUT ON SIZE UNLIMITED
P -- 这是一个注释,P是PRINT的缩写,用于换行和显示信息
P -- 正在执行查询...
SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID = 50;
P -- 查询执行完毕。

运行脚本:

sqlplus username/password @script.sql

SET 命令的最佳实践

  1. 一致性: 在开发一套报表或脚本时,在脚本开头使用 SET 命令统一环境,避免因不同用户或不同机器的 SQL*Plus 配置差异导致输出不一致。
  2. 调试: 使用 SET ECHO ONSET TIMING ON 来调试和性能分析你的脚本。
  3. 可读性: 使用 SET LINESIZESET PAGESIZE 来确保输出结果易于阅读。
  4. 自动化: 在使用 spool 命令将输出重定向到文件时,通常需要关闭 PAGESIZEHEADINGFEEDBACK 等,以生成干净的数据文件(如 CSV)。

掌握 SET 命令是高效使用 SQLPlus 的关键,它能让你完全掌控 SQLPlus 的行为,使其成为一个强大而灵活的工具。

分享:
扫描分享到社交APP
上一篇
下一篇