fetchrow_array的作用
(2011-08-09 20:00:18)
标签:
杂谈 |
fetchrow_array的作用是从数据库中按照所使用的sql取出一行记录(只有一行),
并且是数组的形式返回(返回值可以存放在数组变量中,也可以放在多个普通变量中)。
### 第一个实验:测试fetchrow_array是否按行顺序取数据?
准备:
SQL> select * from an1;
NAME
———- ———-
jiang
zhao
SQL>
举例脚本:
[oracle@localhost test]$ more fetch.pl
#!/u01/dbaperl/bin/perl -w
use strict;
use DBI;
my $dbh=DBI->connect(“DBI:Oracle:”,”anmh”,”anmh”);
my $sql=”select * from anmh.an1 order by 2″;
my $sth = $dbh->prepare($sql);
$sth->execute();
my @row1;
my @row2;
($row1[0],$row2[0])=$sth->fetchrow_array();
($row1[1],$row2[1])=$sth->fetchrow_array();
($row1[2],$row2[2])=$sth->fetchrow_array();
print “$row1[0],$row2[0]\n”;
print “$row1[1],$row2[1]\n”;
print “$row1[2],$row2[2]\n”;
运行结果:
[oracle@localhost test]$ perl fetch.pl
zhao,1
jiang,1688
,
结论说明:
fetchrow_array()是每次只取一行,顺序的往下取数据,不能回头。
如果没有数据了, 就放回undef。
###
第二个实验:测试如果select返回的数据比变量多,如何取数?
这个要注意括号()的使用:
有括号的话,每一个变量都会和select这一行数据中相对应的列赋值。
没有括号的话,单一变量只会存select这一行数据中的最后一列的数值。
准备数据:
SQL> select * from an1;
NAME
———- ———- ———-
jiang
zhao
SQL>
举例脚本:
[oracle@localhost test]$ more myfetch.pl
#!/u01/dbaperl/bin/perl -w
use strict;
use DBI;
my $dbh=DBI->connect(“DBI:Oracle:”,”anmh”,”anmh”);
my $sql=”select * from anmh.an1 order by 2″;
my $sth = $dbh->prepare($sql);
$sth->execute();
my @var;
($var[0])=$sth->fetchrow_array();
$var[1]=$sth->fetchrow_array();
print “$var[0]\n”;
print “$var[1]\n”;
运行结果:
[oracle@localhost test]$ perl myfetch.pl
zhao
35
结论说明:
$var[0]存放的是第一列的数据;
$var[1]存放的是最后一列的数据。
这就是有括号与无括号的区别
###
第三个实验:数组变量的赋值,也是一行一个数组?
准备数据:
SQL> select * from an1;
NAME
———- ———- ———-
jiang
zhao
SQL>
举例脚本:
[oracle@localhost test]$ more arrayfetch.pl
#!/u01/dbaperl/bin/perl -w
use strict;
use DBI;
my $dbh=DBI->connect(“DBI:Oracle:”,”anmh”,”anmh”);
my $sql=”select name,id from anmh.an1 order by 2″;
my $sth = $dbh->prepare($sql);
$sth->execute();
my
@rows1=$sth->fetchrow_array();
print “1:@rows1\n”;
print
“1:\$rows1[0]:$rows1[0],\$rows1[1]:$rows1[1]\n”;
my
@rows2=$sth->fetchrow_array();
print “2:@rows2\n”;
my
@rows3=$sth->fetchrow_array();
print “3:@rows3\n”;
$dbh->disconnect();
运行结果:
[oracle@localhost test]$ perl arrayfetch.pl
1:zhao 1
1:$rows1[0]:zhao,$rows1[1]:1
2:jiang 1688
3:
[oracle@localhost test]$
结论说明:
对于fetchrow_array取出的每一行,可以直接赋给一个数组变量。
如果要使用此行中具体的某一列,可以通过指定数组的脚注来使用指定的数据。