johnirl has asked for the wisdom of the Perl Monks concerning the following question:

Hey Monks
I have output from an sql statement that I am currently printing out like so

A B --- --- 12 16 23 34 23 67

But I want to print it like this

A|12|23|23 B|16|34|67

Any ideas?

JohnIrl

Sum day soon I'Il lern how 2 spelI (r tYpe)

Replies are listed 'Best First'.
Re: DB SQL Result Order
by grinder (Bishop) on Jul 22, 2002 at 09:13 UTC
    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'
Re: DB SQL Result Order
by flocto (Pilgrim) on Jul 22, 2002 at 09:51 UTC

    In case you're using the DBI (which you should) you can do this rather simple:

    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

Re: DB SQL Result Order
by kodo (Hermit) on Jul 22, 2002 at 08:59 UTC
    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