设为首页 加入收藏 网站搜索 繁體中文 中国建站网 — 站长资源平台

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

来源本站整理 作者:佚名 时间:2006-8-2 20:46:00 该文得分0

  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
  ;

相关文章
广告赞助
网友评论

共有 0 位网友发表了评论,平均得分: 0 查看完整内容

用户名:

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

(注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码