数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

在*.SQL文件里获取并使用变量


发布日期:2022年11月16日
 
在*.SQL文件里获取并使用变量

熟悉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 ENAMEJOBSAL

SMITHCLERK

JONESMANAGER

SCOTTANALYST

SQL> c:\sqlsql

输入被截为个字符

原值:select empnoenamejobsal from emp where deptno=& and sal>&

新值:select empnoenamejobsal from emp where deptno= and sal>

EMPNO ENAMEJOBSAL

CLARKMANAGER

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;               

上一篇:Oracle恢复误操作的表

下一篇:Oracle数据库删除表中重复记录的常见方法