eygle.com   eygle.com
eygle.com  
 

« 惊闻著名导演、画家陈逸飞病逝 | Blog首页 | 更新了一下留言板程序 »

如何从SQL*PLUS向shell传递变量

作者:eygle |【转载时请以超链接形式标明文章和作者信息及本声明
链接:
站内相关文章|Related Articles
论坛上有人问这个问题,说无法通过sqlplus向shell传递变量,写了一个简单的脚本进行折中处理,供参考:
[oracle@jumper oracle]$ cat a.sh
sqlplus -S "/ as sysdba" << !
set heading off
col today noprint
column today new_val dat
select to_char( sysdate, 'yyyy-mm-dd') today from dual;
host echo 'today is ' &dat
exit;
exit;
!
[oracle@jumper oracle]$ ./a.sh

today is  2005-04-11

[oracle@jumper oracle]$ 
itpub上的Toms_zhang朋友提供了另外一种方法:
[oracle@jumper oracle]$ more a.sh

#!/bin/ksh
VALUE=`sqlplus -silent "/ as sysdba" < < END
set pagesize 0 feedback off verify off heading off echo off
select max(sequence#) from v\\\$log_history;
exit;
END`

if [ -z "$VALUE" ]; then
echo "No rows returned from database"
exit 0
else
echo "Max Sequence Number: $VALUE"
fi


[oracle@jumper oracle]$ ./a.sh
Max Sequence Number:        17
-----
这篇 【如何从SQL*PLUS向shell传递变量】来自 www.eygle.com | CSDN技术网摘| del.icio.us|365Key

By eygle on 2005-04-11 23:23 | Comments (5) | Posted to FAQ | Edit |Pageviews:

相关文章 随机文章
试用IBM DB2 Enterprise Server V9.0
安装10g以后Oracle9i的DBCA无法启动问题之解决
体验Google的免费邮局及邮件服务
关于oracle的版权信息-一些你可能不知道的,一些可以看出Oracle野心的...
瑞典游记-别章-丹麦哥本哈根游记 Part III
网上相关主题:
Google

留言 (5)

大略看了一下,好像这种作法仍然不是传递变量到shell中吧?你的a.sh只是执行了一次sql而已,是通过host echo将dat变量(这个变量仍然是在sqlplus中而不是在shell中的)打印到屏幕。如果在a.sh中的sqlplus以外的操作系统命令还想使用dat变量呢?难道全部用host命令在sqlplus中作?

Posted by: kamus at April 13, 2005 10:21 AM

看看第二种方法

Posted by: eygle at April 13, 2005 11:07 AM

呵呵,第二种不错,当时怎么没看到这一段,可能是在bloglines中看的,这一段没显示出来

Posted by: kamus at April 21, 2005 12:13 AM

我有另一种类似的需求,在sqlplus中执行一段PL/SQL后,得到一个变量,然后再把这个变量的值用host传给shell,上述的两种方式就不适用了。请问有其他方式吗?

Posted by: ArseneFang at June 14, 2005 2:30 PM

To ArseneFang;

可以这样写:

SQL> col inst new_val instance_name
SQL> select instance_name inst from v$instance;

INST
----------------
conner

SQL> host echo &instance_name
conner

Posted by: eygle at June 14, 2005 10:06 PM

发表留言:



Remember Me?
(输入验证码后方可评论,谢谢支持)



CopyRight © 2004 eygle.com, All rights reserved.