Howdy:

Perl / DB question -

I am running a PostgreSQL database and would like to 
count and sum tables and put that data into a new
table for trending.

I have a perl script that connects to the database and 
can do (I *think* this part is working) three separate 
queries, but now that I have the data, I want to put them
all into the table at the same time.  So, it sounds like
I have to put all of them into one array.

The reason I have the queries separated is because of
the lack of data returned (the SQL portion ran for
over a day and there was no return at all when I merged
the queries into one SQL statement).

So: Now that I have three queries, how can I merge
that data into an array (to put that info into
a table)? 

(I hope this makes some sense, somehow.)

## Perl Script ##

#!/usr/bin/perl -w

# created 09 July 02 -X
#

# script to connect to PostgreSQL do a count
# and summarize the i_pd (dollars) from
# three separate tables (2000 - 2002)
# and print the result (maybe just put
# into a file and statically update the
# html page for this type of stuff)

use diagnostics;
use DIB;
#use Net::SMTP;

$date=`date`;
$trendtxt='/tmp/claim_trend.txt';
$addr='[EMAIL PROTECTED]';

## connect to the database and run 3 queries
# because I can not get a return due to
# the sheer size of the tables and lack
# of indices on numeric fields
#

my $dbh=DBI->connect('dbi:Pg:dbname=local', 'joeuser')
        or die "Can not connect: $!";


my $sql = qq|
        select count (*) as total_cnt_2000,
        sum(i_pd) as total_sum_2000
        from claimsum2000
        | ;

my $xsql = qq|
        select count (*) as total_cnt_2001,
        sum(i_pd) as total_sum_2001
        from claimsum2001
        | ;

my $ysql = qq|
        select count (*) as total_cnt_2002,
        sum(i_pd) as total_sum_2002
        from claimsum2002
        | ;

## set up the query, check for errors, authenticate
#

my $sth=$dbh->prepare($sql) or die "Error =", DBI::errstr;
unless ($sth->execute) {
        print"\n\tExecute failed for stmt:\n\t$sql\nError = ", DBI::errstr;
        $sth->finish;
        $dbh->disconnect;
        die "\n\t\tClean up finished\n";
}

## no idea if this will work
# i want to set this up like the one above
#

my $xsth=$dbh->prepare($xsql) or die "Error =", DBI::errstr;
unless ($xsth->execute) {
        print"\n\tExecute failed for stmt:\n\t$xsql\nError = ", DBI::errstr;
        $xsth->finish;
        $dbh->disconnect;
        die "\n\t\tClean up finished\n";
}

## no idea if this will work
# i want to set this up like the one above
#

my $ysth=$dbh->prepare($ysql) or die "Error =", DBI::errstr;
unless ($ysth->execute) {
        print"\n\tExecute failed for stmt:\n\t$ysql\nError = ", DBI::errstr;
        $ysth->finish;
        $dbh->disconnect;
        die "\n\t\tClean up finished\n";
}

## putting data into text file for
# delivery (email)

open COUNTFILE, ">$trendtxt";
        print COUNTFILE "Today is: $date\n\n";
        print COUNTFILE "Summary of dollars and total count in
Claimsum2000\n\n";
        print COUNTFILE "Please review\n\n";
        print COUNTFILE "count for 2000\tsum for 2000\tcount for 2001\tsum
for 2001\tcount for 2002\tsum for 2002\n";
# where the problem begins ... how can i create an array
# for sth before THIS point?
#
## --> can i create an array @array=$sth+$xsth+$ysth?
## --> how does that work?  can it work that way?

## --> how can i create the below statement from the
## --> statement from above?  what am i missing?
# while (my $a, $b, $c, $d, $e, $f) = $array->fetchrow) {


while (my ($count, $sum)=$sth->fetchrow) {
        print COUNTFILE "$count\t$sum\n";

# insert data into table
        $dbh->do("insert into t_claimsum_trend values (
        '$count',
        '$sum',
        null,
        null,
        null,
        null,
        now() )");
}
close COUNTFILE;
# maybe i should mail the results

$sendmailcount = "/usr/sbin/sendmail $addr < $trendtxt";
print `$sendmailcount`;

$dbh->disconnect;

## end of broken perl script##



Suggestions?  Thanks!

-X

Reply via email to