Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92719260
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-10 09:52:32

  来源:赛迪网    作者:Alice

在实际应用中,SQLPLUS中的new_value作用是很大的,利用它可以解决许多的问题。

引用如下:

Oracle SQL*Plus has a very useful new sub-parameter to the column parameter called new_value. The new_value directive allows data that has been retrieved from an Oracle table to be stored as a variable inside the SQL*Plus script.

By using the new_value parameter you can make your SQL*Plus script behave like a real programming language, storing and addressing program variables, just like in PL/SQL.

The ability to store SQL*Plus variables and fill them with Oracle data is a very powerful feature and makes SQL*Plus scripts more efficient because database access is reduced.

使用方法如下:

#!/bin/sh

export ORACLE_SID=CMPR1

export ORACLE_HOME=/app/oracle/product/9205

export PATH=$ORACLE_HOME/bin:$PATH

sqlplus -s/nolog <

conn / as sysdba

column inst_num new_value ninst_num format 99999;

column inst_name new_value ninst_name format a12;

column db_name new_value ndb_name format a12;

column dbid new_value ndbid format 9999999999;

select d.dbid dbid

, d.name db_name

, i.instance_number inst_num

, i.instance_name inst_name

from v$database d,

v$instance i;

prompt ###############Use new_value####################

select dbid,name from v$database where name='&ndb_name';

prompt ################Use variable###################

variable dbid number;

variable inst_num number;

begin

:dbid := &ndbid;

:inst_num := &ninst_num;

end;

/

select instance_name,instance_number from v$instance where instance_number=:inst_num;

select dbid,name from v$database where dbid=:dbid;

prompt ##############Use sql file#####################

@cs.sql &ndb_name &ndbid &ninst_num

Exit

EOF

[/app/oracle/utils/scripts]$ cat cs.sql

select dbid,name from v$database where name='&1';

variable dbid number;

variable inst_num number;

begin

:dbid := &2;

:inst_num := &3;

end;

/

select instance_name,instance_number from v$instance where instance_number=:inst_num;

select dbid,name from v$database where dbid=:dbid;

variable dbid number;

variable inst_num number;

begin

:dbid := &ndbid;

:inst_num := &ninst_num;

end;

/

select instance_name,instance_number from v$instance where instance_number=:inst_num;

select dbid,name from v$database where dbid=:dbid;

阅读(166) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~