加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

fetchrow_array的作用

(2011-08-09 20:00:18)
标签:

杂谈


fetchrow_array的作用是从数据库中按照所使用的sql取出一行记录(只有一行),
并且是数组的形式返回(返回值可以存放在数组变量中,也可以放在多个普通变量中)。

### 第一个实验:测试fetchrow_array是否按行顺序取数据?

准备:
SQL> select * from an1;
NAME               ID
———- ———-
jiang            1688
zhao                1
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               ID        AGE
———- ———- ———-
jiang            1688         35
zhao                       20
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               ID        AGE
———- ———- ———-
jiang            1688         35
zhao                       20
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取出的每一行,可以直接赋给一个数组变量。
如果要使用此行中具体的某一列,可以通过指定数组的脚注来使用指定的数据。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有