熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

如何在SQL *Plus中把數據庫欄以變量的形式保存

2013-11-13 15:52:25  來源: Oracle 

  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
  ;
  
  
  

From:http://tw.wingwit.com/Article/program/Oracle/201311/17435.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.