On Tue, Dec 21, 2004 at 08:28:43PM -0500, Lincoln A. Baxter wrote:
> Hi Alan,
> 
> Can you turn this script into a test using t/23wide_db_al32utf8.t
> as a model. You could call it t/23wide_db_al32uft8_sp.t
> Please send it to me (and Tim).
> 
> If you do, one of us can take a closer look.  I think the problem,
> however, is the we have no way to know, what the VARCHAR2 being returned
> from your stored procedure could be. I don't recall that we have a UTF8
> test that includes stored procedure parameter outputs, so either way
> this might be useful.  
> 
> Tim: I'll take an initial look at this if you want.  My u8u8 database
> instance will be perfect for testing this.

Thanks. It'll probably be simple to fix once we have a test case.

Tim.

> Lincoln
> 
> 
> On Tue, 2004-12-21 at 17:12 -0800, Alan Seegmiller wrote:
> > DBD::Oracle 1.16
> > Oracle 10g (client 10.1.0.3)
> > Red Hat Enterprise Linux ES release 3 (Taroon Update 3)
> > Perl 5.8.6 (multithreaded disabled)
> > NLS_LANG="AMERICAN_AMERICA.AL32UTF8";
> > NLS_NCHAR="AL32UTF8"
> > 
> > I have found on my system that when I execute a SQL select statement,
> > that the strings returned have Perl's internal utf8 flag turned on, as
> > expected.
> > 
> > However, if the same data selected is done via a stored procedure, the
> > strings returned have their internal utf8 flag turned off.  What I can
> > then do is use _utf8_on in the Encode module to turn the flag on, but
> > of course I would rather not have to.
> > 
> > Are there other users with similiar set-ups successfully returning
> > utf8 strings from Oracle via stored procedures and there is a problem
> > with my set-up?  Or have I stumbled upon something else?
> > 
> > An example of my test script is below.
> > 
> > (I'm in the process of upgrading from Oracle 8i and DBD::Oracle 1.12)
> > 
> > Thanks,
> > Alan
> > 
> > #!/usr/bin/perl
> > 
> > use strict;
> > use DBI;
> > use DBD::Oracle;
> > use Encode qw( encode_utf8 is_utf8 _utf8_on);
> > 
> > $ENV{NLS_LANG}="AMERICAN_AMERICA.AL32UTF8";
> > $ENV{NLS_NCHAR}="AL32UTF8";
> > 
> > my $dbh = DBI->connect(
> >                        "dbi:Oracle:host=10.33.80.10;sid=DBSID",
> >                        "name",
> >                        "pass", 
> >                        { AutoCommit => 1 ,RaiseError => 1 }
> >                       );
> > 
> > my $sth = $dbh->prepare("SELECT message FROM test WHERE id=1");
> > $sth->execute();
> > my $string = $sth->fetchrow_array;
> > 
> > my $string_p;
> > $sth = $dbh->prepare("BEGIN P_TEST.GET_MESSAGE(:1); END;");
> > $sth->bind_param_inout(1, \$string_p, 100);
> > $sth->execute();
> > 
> > print "UTF Test on Select String: ".is_utf8($string)."\n";
> > print "UTF Test on Procedure String:  ".is_utf8($string_p)."\n\n";
> > 
> > print "TURNING ON UTF8 FLAG\n";
> > _utf8_on($string_p);
> > print "UTF Test on Procedure String:  ".is_utf8($string_p)."\n\n";
> 

Reply via email to