Hello,
setting dbd_verbose leads to no additional output. It's only:
DBD::Oracle::st fetchrow_arrayref failed: ORA-24806: LOB form mismatch (DBD
ERROR: OCILobRead) [for Statement "select * from ttt where rownum <2"] at s.pl
line 15.
record couldn't be fetched!! at s.pl line 15.
It seems that I can't install a newer DBI or DBD version. The Perlscipt has to
run on this (our productive) environment.
Here my script:
--------------------
#!/usr/local/bin/perl
use DBI;
use strict;
my $dbh = DBI->connect('DBI:Oracle:db','u','p',{dbd_verbose => 9}) or die "No
database connection!";
$dbh->{LongReadLen} = 16384; # set buffer length for blobs
# session settings
my $sth = $dbh->prepare("alter session set
NLS_DATE_FORMAT='YYYY-MM-DD_hh24:mi:ss'") or die "No prepare: ".DBI->errstr;
$sth->execute or die "No exec".$sth->errstr;
$sth->finish();
my $sthRow = $dbh->prepare("select * from ttt where rownum <2") or die "Prepare
of Database query failed!";
$sthRow->execute() or die "Execution of database query failed!";
$sthRow->fetchrow_arrayref or die "record couldn't be fetched!!";
-------------------
DBD Version:
$Revision: 11.21 $
SQL> show parameter nls
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
nls_calendar string
nls_comp string
nls_currency string
nls_date_format string
nls_date_language string
nls_dual_currency string
nls_iso_currency string
nls_language string AMERICAN
nls_length_semantics string CHAR
nls_nchar_conv_excp string FALSE
nls_numeric_characters string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
nls_sort string
nls_territory string AMERICA
nls_time_format string
nls_time_tz_format string
nls_timestamp_format string
nls_timestamp_tz_format string
SQL>
yoyo
-------- Original-Nachricht --------
> Datum: Fri, 3 Jun 2011 13:27:54 -0400
> Von: John Scoles <[email protected]>
> An: [email protected], [email protected]
> Betreff: RE: perl DBI Oracle NCLOB fetching
>
> That only ocures when the nclob going in is not compatiable with the nclob
> field you are trying to stuff it into.
>
> one thing that wil give us a little more info is to connect with
> dbd_verbose=9 on the attributes and that will tell us you NSL setting.
>
> also get your DBA to check
>
> NLS_CHARACTERSET
> NLS_NCHAR_CHARACTERSET
> NLS_LANGUAGE
> NLS_TERRITORY
>
>
> These should all match up.
>
> Your DBI is rather old what is you version of DBD::Oracle
>
> you might want to upgrade both
>
> Cheers
> John
>
>
> > Date: Fri, 3 Jun 2011 19:03:46 +0200
> > From: [email protected]
> > To: [email protected]
> > Subject: perl DBI Oracle NCLOB fetching
> >
> > Hello,
> >
> > my Perl script uses uses the DBI interface to connect to Oracle and runs
> > a select statement. But if one column is of type NCLOB it fails with:
> >
> > DBD::Oracle::st fetchrow_hashref failed: ORA-24806: LOB form mismatch
> > (DBD ERROR: OCILobRead) [for Statement "SELECT * FROM ttt WHERE
> ROWNUM=1"]
> >
> > I googled a lot and didn't found any solution for it. According to the
> > used versions of Perl, DBI and Oracle and the NLS settings it should
> work.
> >
> > Any idea how to get it working?
> >
> > Here are my used versions:
> >
> > DBI::VERSION = "1.41"
> > perl, v5.8.0
> >
> > SQL> desc ttt
> > Name Null? Type
> > ------------------------------------------------------------------------
> > T1 NCLOB
> > UMSISDN VARCHAR2(200 CHAR)
> > SPARTID NUMBER(2)
> >
> > bash-3.00$ env | grep -i nls
> > NLS_LANG=AMERICAN_AMERICA.UTF8
> >
> NLSPATH=:/export/home/omni/locale/%L/%N.cat:/export/home/omni/locale/%L/%N
> >
> > Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit
> Production
> >
> > much thanks,
> > yoyo
> >
>
--
NEU: FreePhone - kostenlos mobil telefonieren!
Jetzt informieren: http://www.gmx.net/de/go/freephone