可能大家在工作中,经常会有这样一个需求,利用Shell从数据库中取出值,比如说日期,作为一个变量,进行后续处理。
下面我就利用Shell从Oracle和DB2中取值作为一个demo:
DB2:
db2 "connect to GDB_CRM" > /dev/null 2>&1
PAR_DATE=`db2 -x "select distinct substr(Trim(GROUP_CYCLE),1,8) from WF_CUST_CYCLE where APP_CODE='ECRM' and GROUP_CODE='ECRM'"`
db2 quit > /dev/null 2>&1
解释一下上面的代码,上面的代码,连接到GDB_CRM这个数据库,然后查询了一个表,取出当前作业日期,作为变量,存放在PAR_DATE这个变量中。db2 -x的意思就是去除表头,也是不打印那个列名,这样才能将值直接赋给变量。
Oracle:
dt=`sqlplus -s epemdata/epemdata@odsbptdb << !
set colsep' ' echo off feedback off heading off pagesize 0 linesize 80 numwidth 12 termout off timing off trimout on trimspool on;
select to_date('20080101','yyyymmdd') from dual;
exit;
!`
echo $dt
解释一下上面的代码,sqlplus是连接Oracle数据库的命令,后面接用户名/密码@SID,主要是后面的一条Set命令,大意和db2 -x的含义差不多,具体的,可以去查阅相关资料。要实现的功能就是只返回一个值,而且不打印表头,不返回其它信息,还设置了列长度等等。这些都是为了能够将日期直接赋给dt这个shell变量而设置的。
如有不明白,请和我联系,QQ:94424751。以上如果有错误之处,希望多拍砖,本人菜鸟!!!