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

在*.SQL文件裡獲取並使用變量

2013-11-13 16:08:35  來源: Oracle 

  熟悉Oracle SQL語法的人可能都知道在*sql文件裡可以用&& & 變量名稱去獲取並使用變量
  
  以scott用戶 舉例如下
  在C盤的根目錄下寫一個SQL文件 c:\sqlsql
  
  select empnoenamejobsal from emp where deptno=[$ and sal>&]
  
  在SQL*PLUS下帶參數調用 c:\sqlsql
  
  SQL> c:\sqlsql
  
  輸入被截為個字符
  原值  : select empnoenamejobsal from emp where deptno=& and sal>&
  新值  : select empnoenamejobsal from emp where deptno= and sal>
  
  EMPNO ENAME   JOB       SAL
  
   SMITH   CLERK     
   JONES   MANAGER    
   SCOTT   ANALYST    
  
  SQL> c:\sqlsql
  
  輸入被截為個字符
  原值  : select empnoenamejobsal from emp where deptno=& and sal>&
  新值  : select empnoenamejobsal from emp where deptno= and sal>
  
  EMPNO ENAME   JOB       SAL
  
   CLARK   MANAGER    
   KING    PRESIDENT   
  
  但是這種獲取並使用變量的方法不太方便變量名必須按出現的順序以來命名相同變量也要傳遞多次 還有一定的數量限制
  
  有時我們要獲取系統內已有的參數或者固定格式的系統時間就要采取另一種方法
  
  比如以system用戶查看數據庫物理文件的詳細信息 c:\sqlsql
  
  column db_block_size new_value blksz noprint;
  select value db_block_size from v$parameter where name=db_block_size;
  
  column tablespace_name format A;
  column file_name format A;
  set linesize ;
  select file_nameround(bytes/(*)) as total_spaceautoextensible
  increment_by*&blksz/(*) as incrementmaxbytes/(*) as maxsize
  from dba_data_files order by tablespace_name;
  
  說明column db_block_size new_value blksz noprint;
  
  把查詢出來的db_block_size賦值到變量blksz 這樣出現多次的&blksz變量都可以被一個系統內已有的參數值所替換
  
  類似的可采用如下的方法獲取固定格式的系統時間:
  
  比如查詢前一天訂單的數量並生成操作系統下的文件  c:\sqlsql
  
  column yesterday new_value checkdate noprint;
  select to_char(sysdateyyyymmdd) yesterday from dual;
  
  spool c:\[$checkdatetxt]
  
  select count(*) from orders
  where ordertime>=to_date(&checkdateyyyymmdd)
  and ordertime<to_date([$checkdateyyyymmdd)+]
  
  spool off;
From:http://tw.wingwit.com/Article/program/Oracle/201311/17890.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.