Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1401659
  • 博文数量: 556
  • 博客积分: 12626
  • 博客等级: 上将
  • 技术积分: 5799
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-11 15:56
个人简介

从事IT基础架构多年,发现自己原来更合适去当老师……喜欢关注新鲜事物,不仅限于IT领域。

文章分类

全部博文(556)

文章存档

2019年(6)

2018年(15)

2017年(17)

2016年(11)

2015年(2)

2014年(2)

2013年(36)

2012年(54)

2011年(100)

2010年(41)

2009年(72)

2008年(14)

2007年(82)

2006年(104)

分类:

2007-07-06 15:55:04

今天跟开发的同志学了一手,如何将数据库查到值付给shell里的一个变量,例子如下:
sql001="select 'status='||to_char(last_day(sysdate),'dd') from dual;"
monthend=`echo $sql001 | \
     sqlplus -S } | \
     grep status | \
     awk -F= '{print $2}' `
 
可以看出变量monthend就是每月最后一天的值了。
 
针对自己的需要修改了一下:
dbdate1="select 'status '||to_char(sysdate,'dd')||' '||to_char(sysdate-1,'dd') from dual;"
#dbdate2="select 'status='||to_char(sysdate-1,'dd') from dual;"
daystr=`echo $dbdate1 | \
    sqlplus -S } | grep status `
day1=`echo $daystr | awk '{print $2}' `  
day2=`echo $daystr | awk '{print $3}' `  
day=$day1
if [ "$day1" -eq "01" ]
then
    day=`expr $day2 + 1`
fi
echo $day1
echo $day2
echo $day
这里day1是今天的日期,day1是前一天的日期,day的值是在day1为每月首日的时候将day2值加1。别问为什么要这么干,应用需要,呵呵。
自己的shell超烂,还得多跟人家学学,呵呵。
 
还在网上搜到两种方法
1:
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;
!
2:
#!/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
不过感觉都没有随开始的那个好使,全当记录吧。
 
最后在记录一个shell中执行sql的方法,修改下也可以付值。
#!/usr/bin/ksh
SQL_EXEC()
{
sqlplus $USER/$PASSWD@$DB<set linesize 1024
set pagesize 1024
$SQLCOMM
quit
!
}

#select
SQLCOMM="select 'xxx',username from all_users;"

SQL_EXEC | grep xxx
这种方法比较整洁清晰,不过我没试过是否可以,哈哈。
阅读(6536) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~