问题背景 :
1,下面是原来的sql script:目的是返回tablename 中一个最大的batch_no值
aa.sql
set term off
column batch_cnt noprint new_value total
select max(batch_no) batch_cnt from tablename;
set term on
prompt &total
exit
call aa.sql的方法就是在shell scripts 用 number =`sqlplus username/pws@DBname @aa.sql `
2,问题是当 tablename里没有任何纪录的时候,total返回的根本就是空的,
在shell中无法使用
方法一:让total 在 tablename里没有任何纪录的时候,返回0, 这样就不会返回空值
select nvl(max(batch_no),0) batch_cnt from tablename;
nvl (a,b) :if a为null, 返回b
方法二:在shell scripts中,判断变量是否为空,然后赋值
if [ -z "$number " ]
then
echo no data unreleased ..
else
echo max batch is not 0,is :$ number
fi
notes:应该是采用pl/sql中的function 更好,不知道为什么之前的前辈为什么这么用???
1,下面是原来的sql script:目的是返回tablename 中一个最大的batch_no值
aa.sql
set term off
column batch_cnt noprint new_value total
select max(batch_no) batch_cnt from tablename;
set term on
prompt &total
exit
call aa.sql的方法就是在shell scripts 用 number =`sqlplus username/pws@DBname @aa.sql `
2,问题是当 tablename里没有任何纪录的时候,total返回的根本就是空的,
在shell中无法使用
方法一:让total 在 tablename里没有任何纪录的时候,返回0, 这样就不会返回空值
select nvl(max(batch_no),0) batch_cnt from tablename;
nvl (a,b) :if a为null, 返回b
方法二:在shell scripts中,判断变量是否为空,然后赋值
if [ -z "$number " ]
then
echo no data unreleased ..
else
echo max batch is not 0,is :$ number
fi
notes:应该是采用pl/sql中的function 更好,不知道为什么之前的前辈为什么这么用???