To see if the problem's in the Oracle side or the DBI side, does the SQL statement run directly from SQL*Plus on the client? Have you tried using the WE8ISO8859P1 NLS_LANG setting? Don't use the EBCDIC one on HP -- it won't work.
A few other questions/points. Why are you using TO_CHAR? Or, instead of having Perl do your accumulating, you could be using the SQL SUM and COUNT functions. Like this: "select to_char(SUM(sea_temperature),'99999'), count(*) from midasvu.marine_ob ". "where OB_TIME between to_date('01-JAN-1989 0000',". "'dd-mon-yyyy hh24mi') and to_date('01-JAN-1989 2359',". "'dd-mon-yyyy hh24mi')"; Also, when using 8-bit charsets, you'll need to make sure that your term on HP is set up to handle it. You'll need at least "stty cs8 -istrip". Rich Jesse System/Database Administrator [EMAIL PROTECTED] Quad/Tech International, Sussex, WI USA > -----Original Message----- > From: Birchall, Austen [mailto:austen.birchall@;metoffice.com] > Sent: Thursday, October 17, 2002 4:16 AM > To: 'Birchall, Austen'; [EMAIL PROTECTED] > Subject: RE: HP-UX - Perl DBI - mainframe issue > > > Following Davids suggestion (thanks) this is the code that is > causing the > problem - please note I am very much the 'middle man' here > but if anyone has > any further suggestions/questions I can pass them on to the developer > > Thanks > > Austen > > > #!/usr/bin/perl -w > > # Connect to MIDAS > # > # Note that this script requires a range of Oracle > Environment variables to > # be set before starting, and will only work on workstations > where the > # oracle client software is installed. I.e. hc1900. > # > > use strict; > use DBI; > > # Choose production (orap) or test (orat) databases > $ENV{TWO_TASK}='orap'; > #$ENV{'NLS_LANG'}='american_america.we8iso8859p1'; > #$ENV{'NLS_LANG'}='american_america.we8ebcdic1047'; > > # Get user name and password from users .netrc > my ($UserName,$Password); > open(DIN,"$ENV{HOME}/.netrc") or die "Can't open $ENV{HOME}/.netrc"; > while(<DIN>) { > my @fields=split; > if($fields[1] eq 'ukmet') { > $UserName = $fields[3]; > $Password = $fields[5]; > } > } > close(DIN); > unless( defined($UserName) && defined($Password)) { > die "Failed to extract COSMOS username and password from > $ENV{HOME}/.netrc"; > } > > # Connect to the database > my $dbh = DBI->connect("DBI:Oracle:", > $UserName,$Password, > {PrintError => 1, RaiseError => 1}) or > die $DBI::errstr; > > # Do some processing - let's get some marine data. > my $Sql_statement = "select to_char(sea_temperature,'99999') from > midasvu.marine_ob ". > "where OB_TIME between > to_date('01-JAN-1989 0000',". > "'dd-mon-yyyy hh24mi') and to_date('01-JAN-1989 2359',". > "'dd-mon-yyyy hh24mi')"; > > my $Statement = $dbh->prepare($Sql_statement); > $Statement->execute(); > > # Process the results - let's calculate the mean. > my $count = 0; > my $Accumulate=0; > while(my @sstA = $Statement->fetchrow_array()) { > unless(defined($sstA[0])) { next; } > $Accumulate += $sstA[0]; > $count++; > } > $Statement->finish(); > > printf "Mean SST was %5.2f, from %6d > measurements\n",$Accumulate/$count,$count; > > # Close the database connection > $dbh->disconnect(); > exit(0);