数据库-SQL表到Perl脚本

数据库-SQL表到Perl脚本,perl,Perl,我在SQL中创建了一个“事务”表,如下所示: TransactionID Date AccountNumber Type Amount 657520 02-07-1999 016901581432 Debit 16000 657524 02-07-1999 016901581432 Debit 13000 657538 09-07-1999 01

我在SQL中创建了一个“事务”表,如下所示:

TransactionID    Date           AccountNumber   Type    Amount  
657520           02-07-1999     016901581432    Debit   16000  
657524           02-07-1999     016901581432    Debit   13000  
657538           09-07-1999     016901581432    Credit  11000  
657548           18-07-1999     016901581432    Credit  15500  
657519           02-07-1999     016901581433    Debit   12000  
657523           02-07-1999     016901581433    Credit  11000  
657529           03-07-1999     016901581433    Debit   15000  
657539           10-07-1999     016901581433    Credit  10000  
657541           11-07-1999     016901581434    Debit   12000  
657525           03-07-1999     016901581434    Debit   15000  
657533           05-07-1999     016901581434    Credit  12500  
#!/usr/bin/perl
use DBI;
use strict;
use warnings;
print "content-type:text/html\n\n";
$dbh = DBI->connect('dbi:___','prithvi','*password*') or die "Couldn't connect";
my %trans;
my $tran = $dbh->prepare("SELECT * FROM `transaction` LIMIT 0 , 11");
$tran->execute;
while(my @row = $tran->fetchrow_hash) 
{
    my $tran = join ',', @row;
    $trans{$tran[2]}{$tran[3]} += $tran[4];
}
foreach my $acno(sort keys %trans) 
{
print "Total Amount deposited and total amount credited for Account Number $acno is Rs.$trans{$acno}{'Debit'} and Rs.$trans{$acno}{'Credit'}\n";
}
$tran->finish;
$dbh->disconnect;
我必须使用数据库查找每个帐户的借方总金额和贷方总金额。 我的代码如下:

TransactionID    Date           AccountNumber   Type    Amount  
657520           02-07-1999     016901581432    Debit   16000  
657524           02-07-1999     016901581432    Debit   13000  
657538           09-07-1999     016901581432    Credit  11000  
657548           18-07-1999     016901581432    Credit  15500  
657519           02-07-1999     016901581433    Debit   12000  
657523           02-07-1999     016901581433    Credit  11000  
657529           03-07-1999     016901581433    Debit   15000  
657539           10-07-1999     016901581433    Credit  10000  
657541           11-07-1999     016901581434    Debit   12000  
657525           03-07-1999     016901581434    Debit   15000  
657533           05-07-1999     016901581434    Credit  12500  
#!/usr/bin/perl
use DBI;
use strict;
use warnings;
print "content-type:text/html\n\n";
$dbh = DBI->connect('dbi:___','prithvi','*password*') or die "Couldn't connect";
my %trans;
my $tran = $dbh->prepare("SELECT * FROM `transaction` LIMIT 0 , 11");
$tran->execute;
while(my @row = $tran->fetchrow_hash) 
{
    my $tran = join ',', @row;
    $trans{$tran[2]}{$tran[3]} += $tran[4];
}
foreach my $acno(sort keys %trans) 
{
print "Total Amount deposited and total amount credited for Account Number $acno is Rs.$trans{$acno}{'Debit'} and Rs.$trans{$acno}{'Credit'}\n";
}
$tran->finish;
$dbh->disconnect;

我哪里出错了?

使用SQL获得答案,而不是代码

SELECT AccountNumber, Type, SUM(Amount) FROM transaction GROUP BY AccountNumber, Type;

如果添加
use strict
use warnings
,您可能会得到一些关于需要在以下代码中声明@tran的反馈:

while(my @row = $tran->fetchrow_hash) 
{
    my $tran = join ',', @row;
    $trans{$tran[2]}{$tran[3]} += $tran[4];
}
当您尝试将$tran用作数组时,
657520,02-07-1999016901581432,Debit,16000

使用Data::Dumper显示您在结尾处放入%trans的内容:

use Data::Dumper;
print Dumper(\%trans);
你是说:

while(my @row = $tran->fetchrow_array) 
{
    $trans{$row[2]}{$row[3]} += $row[4];
}

您得到的确切错误是什么?我没有得到任何错误,但没有得到正确的输出添加
使用严格的
使用警告
,这可能会指出一个问题。还有一些初学者提示:如果
内容类型不在CGI环境中,则不需要打印
行。您还没有声明
$dbh
,而
strict
将告诉您。通常最好按照文档中的名称命名事物。大多数人把他们的语句句柄称为(
$dbh->prepare
$sth
$sth\u something
。你对这个问题所做的编辑使你收到的答案完全过时。考虑是否显示原始代码?或者至少在底部发布最新的更新?现在这太本地化了,可能已经关闭了。我想从Perl脚本本身获取输出。这就是我请求帮助的原因。我不知道这是可能的还是不可能的。您能告诉我查找借方金额和贷方金额的单一SQL查询是什么吗?提前谢谢。你应该接受答案并提出新问题。见对这个问题的评论。不过,我已经根据你的问题编辑了这个答案。非常感谢你,罗伯先生。最后,我从你的帮助中得到了所需的输出。哦,是的。你说得对。我得到了输出。非常感谢大家