用户登陆:
设为首页 | 加入收藏 | 免费邮箱
建站学院: 建站心得 | 搜索优化 | 建站点子 | 网站推广 | 网站推荐 | 企业新闻 | 人物新闻 | 网媒内幕 | 域名相关 | 热门专题 | 本站作品
设计学院: 网页设计 | 平面设计 | 网络编程 | 多媒体类 | 数据库类 | 服务器类 | 操作系统 | 联盟新闻 | 联盟介绍 | 联盟点评 | 网赚技巧
模板下载: 旅游度假 | 饮食食品 | 公司展示 | 学校教育 | 文化艺术 | 金融财经 | 儿童卡通 | 体育运动 | 服饰品牌 | 爱情交友 | 游戏娱乐
您现在的位置: 星星雨设计站 >> 设计学院 >> 数据库类 >> Oracle >> 教程正文
如何在SQL *Plus中把数据库栏以变量的形式保存
作者:佚名    教程来源:不详    点击数:    更新时间:2007-11-19

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(sysdate,'mm/dd/yyyy hh24:mi') today
from
   dual;

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

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

          (num_rows*avg_row_len)
          ---------------------    * 100
             (blocks*&blksz)

这是整个查询:

column c1  heading "TABLE NAME"      format a15;
column c2  heading "EXTS"            format 999;
column c3  heading "FL"              format 99;
column c4  heading "# OF ROWS"       format 99,999,999;
column c5  heading "#_rows*row_len"  format 9,999,999,999;
column c6  heading "SPACE ALLOCATED" format 9,999,999,999;
column c7  heading "PCT USED"        format 999;

column db_block_sizenew_valueblksznoprint

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

set pages 999;
set lines 80;

spool tab_rpt.lst

select
        table_name            c1,
        b.extents             c2,
        b.freelists           c3,
        num_rows              c4,
        num_rows*avg_row_len  c5,
        blocks*&blksz          c6,
        ((num_rows*avg_row_len)/(blocks*&blksz))*100 c7
from
   perfstat.stats$tab_stats a,
   dba_segments b
where
 b.segment_name = a.table_name
and
   to_char(snap_time,'yyyy-mm-dd') =
      (select max(to_char(snap_time,'yyyy-mm-dd')) from perfstat.stats$tab_stats)
and
   avg_row_len > 500
order by c5 desc

 

发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口教程录入:冰河    责任编辑:冰河 
  网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
最新热门
最新推荐
| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明