Perl DBI:输出不同的表值并保存它们

时间:2015-02-27 22:13:25

标签: sql perl dbi

我的代码看起来像这样:

use DBI;
$dbh = DBI->connect( 'dbi:XYZ:ABC','ABCD', 'XXXX' )
or die "Connection Error: $DBI::errstr\n";

my $sth = $dbh->prepare('select "Tablespace" from <TABLE>')
or die "Couldn't prepare statement: " . $dbh->errstr;
$dbh->errstr;
$sth->execute
or die "Can't execute SQL statement: $DBI::errstr\n";

my @schemaname;
my @schematable;
while (@schemaname = $sth->fetchrow_array()){
print "SchemaName is: @schemaname\n";
$schematable[0][0]= $schemaname[0];
$schematable[1][0]= $schemaname[1];
$schematable[2][0]= $schemaname[2];
$schematable[3][0]= $schemaname[3];
$schematable[4][0]= $schemaname[4];

}
warn "Data fetching terminated early by error: $DBI::errstr\n"
if $DBI::err;
print($schematable[0][0]);
print($schematable[1][0]);
print($schematable[2][0]);
print($schematable[3][0]);
print($schematable[4][0]);
$sth->finish();
$dbh->disconnect;

我在这里尝试做的是从SQl数据库输出,但将其保存在一个数组中,以便我可以使用该数据生成警报。我从最后7行继续获得相同的字符串。此外,当我尝试使用数据库中的其他代码进行同样的操作来保存数字时:

my $ssth = $dbh->prepare("SELECT STORAGE FROM database")
or die "Couldn't prepare statement: " . $dbh->errstr;
$dbh->errstr;
$ssth->execute
or die "Can't execute SQL statement: $DBI::errstr\n";

my @usedschemaspace;
while (@usedschemaspace = $ssth->fetchrow_array( )){
print "Used Schema space: @usedschemaspace\n";
$us= $usedschemaspace[0];
$schematable[0][1]= $schemaname[0];
$schematable[1][1]= $schemaname[1];
$schematable[2][1]= $schemaname[2];
$schematable[3][1]= $schemaname[3];
$schematable[4][1]= $schemaname[4];

}
warn "Data fetching terminated early by error: $DBI::errstr\n"
if $DBI::err;

$ssth->finish();
$sth->finish();
print($schematable[2][1]);
print($schematable[2][2]);
.....

断开与数据库的连接

$dbh->disconnect;

在上述两种情况下,除了最后一个变量存储在schematable [i] [j]中之外,我什么都看不到。有什么迹象表明我做错了吗?

1 个答案:

答案 0 :(得分:1)

参考你发布的第一篇文章,我看到两件事对我来说非常突出:

my $sth = $dbh->prepare("SELECT "Tablespace" FROM <TABLE>")

while (@schemaname = $sth->fetchrow_array()){

您只在SQL查询中请求单个变量(“表空间”),因此将$ sth-&gt; fetchrow_array()的输出分配给@schemaname将导致@schemaname仅在$ schemaname中定义[ 0]。

运行第一个代码块时输出的确切含义是什么?

如果您尝试将所有返回的值保存到数组中,请尝试这样的操作。

my $i=0;
while(my ($schema_name) = $sth->fetchrow_array()) {
    $schematable[$i++][0] = $schema_name;
}

#blah blah blah

$i=0;
while(my ($used_schema_space) = $ssth->fetchrow_array()) {
    $schematable[$i++][1] = $used_schema_space;
}

我不确定你为什么要在最后打印$ schematable [2] [2],因为你从未在脚本的早期定义它。

我希望这会有所帮助......我不是100%确定您尝试使用的数据结构类型或您希望实现的目标。