Shell或PERL脚本 - 根据当前活动表运行多个查询

时间:2016-07-08 19:39:26

标签: perl shell sqlplus

我希望有人可以帮助我使用我的shell脚本。我有一个列出不同表前缀的文件。

该文件如下所示:

cat table_names
table:1234:nfl
table1:2345:nhl
table2:5555:nba
table3:3355:mls
table4:2463:echl

我每周的每一天都有不同的表格。

daya
dayb
dayc
dayd
daye
dayf
dayg
dayh

我有另一个文件告诉我当前的表是什么

cat today_table
Today's active table is dayf

我要做的是使用当天的当前活动表查询每个表前缀(table-table4)。

这是我到目前为止所做的:

#!/bin/ksh

active_table=$(today_table|awk '{print $5}')
prefix_table=$(cat table_names|grep -v ^#|awk -F":" '{print $1}'|sort -u)
today=`date "+%Y-%m-%d"`
OutPutDir="/tneal01/SPOOL"
OutPutFile="error"



Execsqlstatement1="select
to_char(current_date,'YYYYMMDD')  day,
count(*)                      Total
from ${prefix_table}.${active_table}
GROUP BY to_char(current_date,'YYYYMMDD')


#adding connection details here

$ORACLE_HOME/bin/sqlplus *********** << Eossql
    set lines 80
    set pages 50000
    set timing on
    spool tneal01/SPOOL/counts.`date +%Y-%m-%d`.tmp
    $Execsqlstatement1
    /
    spool off
    quit;
Eossql
grep "ORA-" $OutPutDir/$OutPutFile.$today.tmp
if [ $? -eq 0 ]
then
    echo "LOG MESSAGE sql select failed"


exit 0

我遇到问题的部分是循环。我几乎要看看当前的#34; active_table&#34;并对所有五个表运行查询并将结果假脱机到文件

示例是:

今天的活动表= dayg

select ***
from table.dayg
where .....

select ***
from table1.dayg
where .....

select ***
from table2.dayg
where .....

select ***
from table3.dayg
where ....

select ***
from table4.dayg
where .....

所以假脱机文件看起来像

dayf table
Monday July 8th
table  count =31
table1 count =44
table2 count =33
table3 count =55
table4 count =23

希望我能清楚地解释清楚。

编辑:我可以在Perl或shell中编写它。这两项建议都将受到高度赞赏

感谢阅读!

0 个答案:

没有答案