在sqlplus模式下,select查询时常会遇到返回记录折行的情况,这时候我们往往会设置行宽、列宽和页面记录数。
行宽
设置行宽使用 set linesize 语句,示例如下:
--设置行宽为200个字符
SQL> set linesize 200
linesize默认值是80,可以通过show linesize 查看
SQL> show linesize
linesize 80
我们以v$parameter表为例进行讲解。
先查看 v$parameter 表各列定义的宽度:
SQL> desc v$parameter
Name Null? Type
----------------------------------------- -------- ----------------------------
NUM NUMBER
NAME VARCHAR2(80)
TYPE NUMBER
VALUE VARCHAR2(4000)
DISPLAY_VALUE VARCHAR2(4000)
ISDEFAULT VARCHAR2(9)
ISSES_MODIFIABLE VARCHAR2(5)
ISSYS_MODIFIABLE VARCHAR2(9)
ISINSTANCE_MODIFIABLE VARCHAR2(5)
ISMODIFIED VARCHAR2(10)
ISADJUSTED VARCHAR2(5)
ISDEPRECATED VARCHAR2(5)
ISBASIC VARCHAR2(5)
DESCRIPTION VARCHAR2(255)
UPDATE_COMMENT VARCHAR2(255)
HASH NUMBER
查询结果中,每列的宽度默认是根据该列定义的宽度显示的,比如某列定义9字符,那么没有使用col xxx format axxx 限制该列的宽度,那么该列就以所定义的9字符为宽度。
由上面的查询得知,ISDEFAULT、ISSES_MODIFIABLE 和 ISSYS_MODIFIABLE 列定义的宽度分别为9、5、9。
我们做如下查询进行验证:
SQL> select ISDEFAULT,ISSES_MODIFIABLE, ISSYS_MODIFIABLE from v$parameter;
ISDEFAULT ISSES ISSYS_MOD
--------- ----- ---------
TRUE FALSE FALSE
FALSE FALSE FALSE
TRUE FALSE FALSE
TRUE TRUE IMMEDIATE
TRUE TRUE IMMEDIATE
TRUE FALSE IMMEDIATE
TRUE FALSE IMMEDIATE
TRUE FALSE IMMEDIATE
TRUE FALSE IMMEDIATE
TRUE FALSE FALSE
TRUE FALSE FALSE
可看出这3列显示的宽度确实为9、5、9 。
因为sqlplus命令窗口的宽度有限,所以虽然有的列定义为4000字符,但其最宽只能按照sqlplus命令行窗口的宽度来显示
。
我们通过v$parameter表的 DISPLAY_VALUE进行验证:
SQL> select DISPLAY_VALUE from v$parameter;
DISPLAY_VALUE
--------------------------------------------------------------------------------
150
248
TRUE
0
FALSE
0
0
8
可以看出列宽并未达到 4000字符。
列宽
设置行宽使用 column xxx format 语句(可简写为:col xxx format ),示例如下:
--设置name列宽为40个字符
SQL> column name format a40 //a表示alphanumeric,字符的意思
当列宽为默认的80时,进行如下查询:
--列宽为80
SQL> select name from v$parameter;
NAME
--------------------------------------------------------------------------------
lock_name_space
processes
sessions
timed_statistics
timed_os_statistics
resource_limit
license_max_sessions
license_sessions_warning
cpu_count
instance_groups
event
现修改name列宽为40后,再次查询:
--修改name列宽为40
SQL> column name format a40
--列宽显示由80变为40
SQL> select name from v$parameter;
NAME
----------------------------------------
lock_name_space
processes
sessions
timed_statistics
timed_os_statistics
resource_limit
license_max_sessions
license_sessions_warning
cpu_count
instance_groups
event
页面记录数
设置页面记录数使用 set pagesize 语句,示例如下:
--设置页面记录数为20
SQL> set pagesize 20
pagesize默认值是14,可以通过show pagesize 查看
SQL> show pagesize
pagesize 14
当pagesize为默认值14时,查询如下:
--每页显示14行记录
SQL> select name from v$parameter;
NAME
----------------------------------------
lock_name_space
processes
sessions
timed_statistics
timed_os_statistics
resource_limit
license_max_sessions
license_sessions_warning
cpu_count
instance_groups
event
NAME
----------------------------------------
sga_max_size
use_large_pages
pre_page_sga
shared_memory_address
hi_shared_memory_address
use_indirect_data_buffers
lock_sga
processor_group_name
shared_pool_size
large_pool_size
java_pool_size
将pagesize修改成20后再次查询:
SQL> set pagesize 20
SQL> select name from v$parameter;
NAME
----------------------------------------
lock_name_space
processes
sessions
timed_statistics
timed_os_statistics
resource_limit
license_max_sessions
license_sessions_warning
cpu_count
instance_groups
event
sga_max_size
use_large_pages
pre_page_sga
shared_memory_address
hi_shared_memory_address
use_indirect_data_buffers
NAME
----------------------------------------
lock_sga
processor_group_name
shared_pool_size
large_pool_size
java_pool_size
streams_pool_size
shared_pool_reserved_size
java_soft_sessionspace_limit
java_max_sessionspace_size
spfile
instance_type
nls_language
nls_territory
nls_sort
nls_date_language
nls_date_format
nls_currency