You could do something like this -
C:\>
C:\>type fetchdata.pl
#!perl -w
use strict;
use DBI;
my @all_data;
my $sql = "SELECT empno, ename FROM emp";
my $dbh = DBI->connect ("dbi:Oracle:db_name", "user", "password");
my $sth = $dbh->prepare ($sql);
$sth->execute();
while (my @row = $sth->fetchrow()) {
push @all_data, [@row];
}
$sth->finish();
$dbh->disconnect();
# ##############################################################################
# The array @all_data looks like this now.
# Each array element is a reference to an anonymous array that has the "Empno"
# and "Ename" values.
# ##############################################################################
# $all_data[1] = [ "7369", "SMITH" ];
# $all_data[2] = [ "7499", "ALLEN" ];
# $all_data[3] = [ "7521", "WARD" ];
# $all_data[4] = [ "7566", "JONES" ];
# $all_data[5] = [ "7654", "MARTIN" ];
# $all_data[6] = [ "7698", "BLAKE" ];
# $all_data[7] = [ "7782", "CLARK" ];
# $all_data[8] = [ "7788", "SCOTT" ];
# $all_data[9] = [ "7839", "KING" ];
# $all_data[10] = [ "7844", "TURNER" ];
# $all_data[11] = [ "7876", "ADAMS" ];
# $all_data[12] = [ "7900", "JAMES" ];
# $all_data[13] = [ "7902", "FORD" ];
# $all_data[14] = [ "7934", "MILLER" ];
# ##############################################################################
# loop and print
foreach my $item (@all_data) {
printf ("Empno = %4d Ename = %-s\n", @$item );
}
C:\>
C:\>perl fetchdata.pl
Empno = 7369 Ename = SMITH
Empno = 7499 Ename = ALLEN
Empno = 7521 Ename = WARD
Empno = 7566 Ename = JONES
Empno = 7654 Ename = MARTIN
Empno = 7698 Ename = BLAKE
Empno = 7782 Ename = CLARK
Empno = 7788 Ename = SCOTT
Empno = 7839 Ename = KING
Empno = 7844 Ename = TURNER
Empno = 7876 Ename = ADAMS
Empno = 7900 Ename = JAMES
Empno = 7902 Ename = FORD
Empno = 7934 Ename = MILLER
C:\>
C:\>
Or you could also use selectall_arrayref() to fetch all data at once, store it in a multidimensional array and return the reference of that array.
C:\>
C:\>type fetchdata_1.pl
#!perl -w
use strict;
use DBI;
my $sql = "SELECT empno, ename FROM emp";
my $dbh = DBI->connect ("dbi:Oracle:db_name", "user", "password");
my $all_data = $dbh->selectall_arrayref($sql);
$dbh->disconnect();
# ##############################################################################
# The scalar variable $all_data is a reference to an anonymous array. Let's say
# that array is @x. Then:
# $all_data = [ @x ];
# And the elements of array @x are as follows:
# ##############################################################################
# $x[1] = [ "7369", "SMITH" ];
# $x[2] = [ "7499", "ALLEN" ];
# $x[3] = [ "7521", "WARD" ];
# $x[4] = [ "7566", "JONES" ];
# $x[5] = [ "7654", "MARTIN" ];
# $x[6] = [ "7698", "BLAKE" ];
# $x[7] = [ "7782", "CLARK" ];
# $x[8] = [ "7788", "SCOTT" ];
# $x[9] = [ "7839", "KING" ];
# $x[10] = [ "7844", "TURNER" ];
# $x[11] = [ "7876", "ADAMS" ];
# $x[12] = [ "7900", "JAMES" ];
# $x[13] = [ "7902", "FORD" ];
# $x[14] = [ "7934", "MILLER" ];
# ##############################################################################
# i.e. each array element is a reference to an anonymous array that has the
# "Empno" and "Ename" values.
# loop and print the data
foreach my $item (@$all_data) {
printf ("Empno = %4d Ename = %-s\n", @$item );
}
C:\>
C:\>perl fetchdata_1.pl
Empno = 7369 Ename = SMITH
Empno = 7499 Ename = ALLEN
Empno = 7521 Ename = WARD
Empno = 7566 Ename = JONES
Empno = 7654 Ename = MARTIN
Empno = 7698 Ename = BLAKE
Empno = 7782 Ename = CLARK
Empno = 7788 Ename = SCOTT
Empno = 7839 Ename = KING
Empno = 7844 Ename = TURNER
Empno = 7876 Ename = ADAMS
Empno = 7900 Ename = JAMES
Empno = 7902 Ename = FORD
Empno = 7934 Ename = MILLER
C:\>
C:\>
Hope that helps,
tyler_durden