WEB开发网
开发学院数据库Oracle 如何在SQL *Plus中把数据库栏以变量的形式保存 阅读

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

 2008-12-17 13:07:47 来源:WEB开发网   
核心提示:Oracle SQL *Plus有一个非常有用的子参数(subparameter),它从属于一个叫着NEW_VALUE的数据栏参数,如何在SQL *Plus中把数据库栏以变量的形式保存,NEW_VALUE指示允许你以SQL *Plus脚本中的变量保存从Oracle表格查询而得到的数据,用过使用NEW_VALUE参数,我

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
  ;

Tags:如何 SQL Plus

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接