I don't know what settings the DBD::Oracle module provides but I have seen a mention of RowCache in DBI that you could give a go. Also it would be interesting to test the speed of the different forms of fetch like the bind_columns variant for example :
$sth_dipp = $dbh_ideas->prepare(q{DECLARE dipp PacProject.dipp_project
+_cur; BEGIN pacproject.get_dipp_projects(:dipp); END;});
$sth_dipp->bind_param_inout(":dipp",\$s_dipp_proj,0,{ora_type => ORA_R
+SET});
$sth_dipp->execute;
my ($name, $code, $RA, $manager);
$sth_dipp->bind_columns(\($name, $code, $RA, $manager));
while ( $sth_dipp->fetch ){
$name ||= 'Unknown';
$code ||= 'Unknown';
$RA ||= 'Unknown';
$manager ||= 'Unknown';
print qq|$name,$code,$RA,"$manager"\n|;
}