If you need to access the values of the returned columns individually, then you will have to push the results onto arrays, and then print them out afterwards with something like print( join( '|', @column ), "\n" ).
On the other hand, if you don't need to do this, you could just concatenate to strings, which will be far cheaper in terms of memory consumed.
# assuming $sth is your SQL statement under DBI
$sth->execute();
my @columns;
for( @{$sth->{NAME}} ) {
push @columns, $_;
}
while( my $r = $sth->fetchrow_arrayref ) {
my $index = 0;
for( @$r ) {
$columns[$index++] .= "|$_";
}
}
print "$_\n" for @columns;
update: rewrote the code to follow the spec. (Wasn' t paying attention :).
print@_{sort keys %_},$/if%_=split//,'= & *a?b:e\f/h^h!j+n,o@o;r$s-t%t#u' | [reply] [d/l] [select] |
my @columns = qw#A B#;
foreach (@columns)
{
my $rows = $DBH->selectcol_arrayref ("SELECT $_ FROM $table") or d
+ie $DBH->errstr ();
print STDOUT join ('|', @$rows), "\n";
}
You can use a statement handle instead of the sql-query-string, but I don't know if placeholders are supported.. Maybe somebody else knows?! But I guess you can trust your hand-build array. This method has a lot of overhead so for performance-relevant tasks I would seek some other solution..
Regards,
-octo | [reply] [d/l] |
Hi johnirl,
Well you could write a regexpr for this of course, but I would suggest you to change the SQL-Statement instead. I don't know what kind of SQL etc you use for this but in sqlplus for example there are lots of options to format the output. If you use SQLPLUS, have a look at this manual.
If you want to use a perlish solution, I would simply but both columns in a seperate array, cut out the "---" and set $\ to "|".
giant | [reply] |