On Fri, Nov 16, 2018 at 11:18 AM Ron Savage <r...@savage.net.au> wrote:

> Hi Dan
>
> Does it make any difference if you put LongReadLen and LongTruncOK next
> to RaiseError in the attrs?
>

Hi Ron. Thanks for the response :)

No change, unfortunately:

my $dbh = DBI->connect(
    "dbi:ODBC:DRIVER=DB2;database=BLUDB;hostname=$db2_hostname;port=50000"
  , 'bluadmin'
  , '<password>'
  , {
        RaiseError    => 0
      , AutoCommit    => 1
      , LongReadLen   => 65535 * 1024  # 64MB
      , LongTruncOK   => 1
    }
) || die( $DBI::errstr );

I've commented out all other lines mentioning LongReadLen or LongTruncOK.
This still gives:

Can't set DBI::db=HASH(0x55e58ba53e30)->{LongTruncOK}: unrecognised
attribute name or invalid value at
/usr/lib64/perl5/vendor_perl/5.26.2/x86_64-linux-thread-multi/DBI.pm line
730.
DBD::ODBC::st fetchrow_hashref failed: st_fetch/SQLFetch (long truncated
DBI attribute LongTruncOk not set and/or LongReadLen too small) (SQL-HY000)
at db2_syscat_columns.pl line 38.

Dan


>
> On 16/11/18 10:54, Daniel Kasak wrote:
> > Hi Martin. Sorry for the very long delay. We had abandoned the ODBC
> > driver in favour of the native DBD::DB2, and I've been working on this
> > project outside my normal work hours anyway, so got bogged down in other
> > issues ...
> >
> > I've uploaded the trace to:
> https://tesla.duckdns.org/downloads/trace.log
> > The script I'm using to generate this is:
> > https://tesla.duckdns.org/downloads/db2_syscat_columns.pl
> >
> > It dies on the 1st call of $sth->fetchrow_hashref():
> >   DBD::ODBC::st fetchrow_hashref failed: st_fetch/SQLFetch (long
> > truncated DBI attribute LongTruncOk not set and/or LongReadLen too
> > small) (SQL-HY000) at db2_syscat_columns.pl
> > <http://db2_syscat_columns.pl> line 36.
> >
> > Thanks for your time ...
> >
> > Dan
> >
> > On Thu, Apr 5, 2018 at 9:50 PM Martin J. Evans via dbi-users
> > <dbi-users@perl.org <mailto:dbi-users@perl.org>> wrote:
> >
> >     On 05/04/18 12:24, Daniel Kasak wrote:
> >      > Hi all.
> >      >
> >      > I'm writing a database utility that has to access IBM's "DashDB"
> >     and other DB2-variants. I have their latest ODBC driver, and I have
> >     simple queries working. However queries against their system catalog
> >     are not working - queries appear to be returning *empty* recordsets.
> >     After some laborious debugging, I can see that when I call
> >     $sth->fetchrow_array, DBI::errstr is set to:
> >      >
> >      > st_fetch/SQLFetch (long truncated DBI attribute LongTruncOk not
> >     set and/or LongReadLen too small) (SQL-HY000)
> >      >
> >      > I've dealt with this before. So when constructing my $dbh, I do:
> >      >
> >      > $self->{dbh}->{LongReadLen} = 65535 * 1024 # 64MB - yes I know
> >     it's big
> >      > $self->{dbh}->{LongTruncOK} = 1;
> >      >
> >      > This usually fixes things - or at least has for SQL Server and
> >     Netezza. For DB2 connections however, it appears to have no effect.
> >      >
> >      > I've turned on ODBC tracing immediately prior to calling
> >     $sth->prepare ... $sth->execute ... $sth->fetchrow_array:
> >      > https://paste.pound-python.org/show/hS6ur7dwGRsQubr29HFT/
> >      >
> >      > This one was from the query:
> >      > select * from SYSCAT.COLUMNS
> >      >
> >      > Does anyone know why LongTruncOk / LongReadLen are not being
> >     honored here?
> >      >
> >      > I'm using unixODBC-2.3.6, DBD::ODBC from git, and the latest
> >     available DB2 ODBC driver.
> >      >
> >      > Please help! Thanks :)
> >      >
> >      > Dan
> >
> >     There are some very long columns in that result-set but I can't tell
> >     from the unixodbc log alone what has happened.
> >     Can you reduce your perl to the simplest test you can and rerun with
> >
> >     DBI_TRACE=15=trace.log perl mycode.pl <http://mycode.pl>
> >
> >     and show me the trace.log file.
> >
> >     Martin
> >
>
> --
> Ron Savage - savage.net.au
>

Reply via email to