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 >