http://www.perlmonks.org?node_id=1013398


in reply to Extracting only required length in a column in perl DBI

I'm not sure you pasted actual code, as that would warn a lot. Why did you comment 'use strict;'? And why is 'use warnings;' missing? I am absolutely sure it will give you all the hints you need …

my $dbh = DBI->connect($server,$user,$passwd,$dbd, {RaiseError => 1,Au +toCommit => 1 }); ^? read the docs again # Prepare the SQL query for execution my $sql = "SELECT $ans_rid, $ans_qcn, $ans_loc FROM ft_int_tbl WHERE $ +ans_rid is not null"; ^? ^? ^? ^ +? my $sth = $dbh->prepare($sql) or die "Couldn't prepare statement:$DBI: +:errstr; stopped"; ^? you set RaiseError, so you'll never g +et that # Execute the query $sth->execute() or die "Couldn't execute statement: $DBI::errstr; stop +ped"; ^? same here #open JKLL, ">$an_dt_file" or die "can't open file $ansb_detail_file f +or write,\n"; # Fetch each row and print it while ( my ($ans_rid, $ans_qcn, $ans_loc) = $sth->fetchrow_array() ) { my ($ansb_cktid, $ansb_mcn, $ansb_soc) = unpack("A3 A3 A3", $_); ^? what do + you expect to be in $_ #print JKLL"Field 1: $ansb_cktid Field 2:$ansb_mcn Field 3: $ansb_soc +\n"; print "Field 1: $ansb_cktid Field 2:$ansb_mcn Field 3: $ansb_soc \n"; } ==> corrected based on guesses, as I have no idea my $dbh = DBI->connect ($server, $user, $passwd, { RaiseError => 1, PrintError => 1, # Comes in very handy when you are runni +ng into trouble ShowErrorStatement => 1, # this too AutoCommit => 1, }); # Prepare the SQL query for execution my $sql = "SELECT ans_rid, ans_qcn, ans_loc FROM ft_int_tbl WHERE ans_ +rid is not null"; my $sth = $dbh->prepare ($sql); # Execute the query $sth->execute (); #open JKLL, ">$an_dt_file" or die "can't open file $ansb_detail_file f +or write,\n"; # Fetch each row and print it while (my ($ans_rid, $ans_qcn, $ans_loc) = $sth->fetchrow_array ()) { my ($ansb_cktid, $ansb_mcn, $ansb_soc) = unpack "A3 A3 A3", $ans_l +oc; print "Field 1: $ansb_cktid Field 2:$ansb_mcn Field 3: $ansb_soc \ +n"; }

Enjoy, Have FUN! H.Merijn

Replies are listed 'Best First'.
Re^2: Extracting only required length in a column in perl DBI
by Thomas Kennll (Acolyte) on Jan 15, 2013 at 14:00 UTC
    Tux,
    while (my ($ans_rid, $ans_qcn, $ans_loc) = $sth->fetchrow_array ()) { my ($ansb_cktid, $ansb_mcn, $ansb_soc) = unpack "A3 A3 A3", $ans_l +oc;
    This unpacks only the 3rd column ie, $ans_loc... I wanted to unpack all the 3 columns..ie, $ans_rid, $ans_qcn, $ans_loc and have the values stored in $ansb_cktid, $ansb_mcn, $ansb_soc..
      Then you need to unpack all 3, you can't unpack three variables at once AFAIK. The "A3 A3 A6" is a format for unpacking one variable, as Tux showed in the example. You could just used substrings,
      $ans_rid = substr($ans_rid, 0, 3); $ans_qcn = substr($ans_qcn, 0, 3); $ans_loc = substr($ans_loc, 0, 6);
      ..or make new variables for each substr() leaving the original variable intact.