数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

如何在SQL *Plus中把数据库栏以变量的形式保存


发布日期:2022年07月31日
 
如何在SQL *Plus中把数据库栏以变量的形式保存

Oracle SQL *Plus有一个非常有用的子参数(subparameter)它从属于一个叫着NEW_VALUE的数据栏参数NEW_VALUE指示允许你以SQL *Plus脚本中的变量保存从Oracle表格查询而得到的数据

用过使用NEW_VALUE参数你可以像真正的编程语言那样使用SQL *Plus脚本来保存和寻址程序变量如同PL/SQL那样

保存SQL *Plus变量并在其中填充Oracle数据是非常重要的特性由于它减少了对数据库访问所以它提高了SQL *Plus脚本的有效性

collog_mode_valnew_valuelog_modenoprint

select

value log_mode

from

v$parameter

where

name = archive_log_mode;

select

The current archivelog mode is ||&&log_mode from dual;

column today new_value today;

select

to_char(sysdatemm/dd/yyyy hh:mi) today

from

dual;

现在我们理解了SQL *Plus变量是如何保存的了让我们看看一个真实的例子下面的例子来自STATSPACK报告改报告描述了表格增长与数据库块大小的函数关系由于DB_BLOCK_SIZE在整个数据库中是一个常量我们使用NEW_VALUE参数来捕获改数值一次并把它作为输出的一部分重新显示出来

在这个例子中我们定义了一个称之为&blksz的变量并在主查询中用它来判断表格中的剩余空间下面的例子向我们演示了如何进行这个计算知道块大小可以让我们很快估计出表格中的剩余空间容量

(num_rows*avg_row_len)

*

(blocks*&blksz)

这是整个查询

column c heading TABLE NAME format a;

column c heading EXTS format ;

column c heading FL format ;

column c heading # OF ROWS format ;

column c heading #_rows*row_len format ;

column c heading SPACE ALLOCATED format ;

column c heading PCT USED format ;

column db_block_sizenew_valueblksznoprint

select value db_block_size from v$parameter where name = db_block_size;

set pages ;

set lines ;

spool tab_rptlst

select

table_name c

bextents c

bfreelists c

num_rows c

num_rows*avg_row_len c

blocks*&blksz c

((num_rows*avg_row_len)/(blocks*&blksz))* c

from

perfstatstats$tab_stats a

dba_segments b

where

bsegment_name = atable_name

and

to_char(snap_timeyyyymmdd) =

(select max(to_char(snap_timeyyyymmdd)) from perfstatstats$tab_stats)

and

avg_row_len >

order by c desc

;

上一篇:使用Oracle数据挖掘API方法详解

下一篇:访问多个SQL Server数据库