Re: Strange happenings in ODBC

"Martin J. Evans" <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.dbi.general
Organization Easysoft Limited
Message-ID <[email protected]>
On 28/09/11 22:26, Martin J. Evans wrote:
> On 28/09/2011 22:10, Jeff Tate wrote:
>> 1) the versions of DBI and ODBC are the same on Windows and AIX
>> 2) the program is identical on Windows and AIX. I develop on Windows and
>> move to AIX for production. The two output fragments are from an identical
>> call to the same stored procedure on the same database with the same
>> parameters
>> 3) the dumper output is nested in memory. The SP returns variant record
>> types in a common column set (sorry, I have been saying tags for what are
>> actually columns in the result set) and I have to juggle and nest them as I
>> can't do the value-added work till I have all records returned. The actual
>> columns returned are the hash that starts with 'Adjusted_Fiscal_Year' => '
>> ' (I have removed certain sensitive data)
>
> ok, so we are getting somewhere in that we now know the Adjusted_Fiscal_year is actually the data returned from the database and not all those hashes above it. This is some progress ;-)
>> 4) the leading => marks inside dumper are my addition, to indicate which
>> column names differ between the two environments.
> ok, so we have the same code on both operating systems talking to the same database via 2 different (by virtue of platform) ODBC drivers, calling the same procedure which issues a select and yet you seem to be saying the result-set in one has different columns to the other.
>
> Using your notation:
>
> => 'LCTN_CODE' => '03',
> => 'PAY_ORDER_DATE' => '2011-09-22',
>
> indicates these columns are present in Windows and not on AIX - yes?
>
> and yet I'd say given your output:
>
> LCTN_CODE
> PAY_ORDER_DATE
> PRVDR_MMIS_IDNTFR
>
> are present in the Windows result but missing from the AIX result and:
>
> Line TCN
> Location
>
> are in the AIX result and not in the Windows result - there are more discrepancies than this in reality but I'm not working them all out.
>
> and yet there are 34 columns in each! This does not make sense. What is the schema for the query - i.e., in your select in the procedure look at the columns selected and compare the names with those you get - where are the discrepancies?
>
>> 5) I am happy to share the code, but I am not sure what to send. At the
>> point that these hashes are created, all that has run is the 'dbi->connect'
>> and the 'sth->fetchrow_hashref' loop
>> 6) the SP itself does a lot of complicated filters, case statements, joins
>> across a very large set of transaction records.
>>
>> 7) not sure what you mean by a reproducible problem - it happens every time
>> I run the program in the pair of environments, but I'm sure that's not what
>> you mean.
>>
>> Thanx
> So, step back and compare the output on Windows and AIX with the select instead of comparing the output in AIX and Windows - what column names exist in either output that differ from what you selected.
>
> Martin

and check if you are using calculated columns you are giving the columns an alias in the select.

Martin

>> -----Original Message-----
>> From: Martin J. Evans [mailto:[email protected]]
>> Sent: Wednesday, September 28, 2011 4:51 PM
>> To: [email protected]
>> Cc: Jeff Tate
>> Subject: Re: Strange happenings in ODBC
>>
>> On 28/09/2011 21:07, Jeff Tate wrote:
>>> Thanx for the offer. What additional information would aid you in aiding
>> me?
>>> (PS - did the attachment make it through - it showed the specific tag
>>> sets (columns really) returned.
>>>
>>> Jeff Tate
>> Jeff, please keep things on list as other might have input too.
>>
>> Can you confirm each of the following:
>>
>> o you are using the same version of DBI and DBD::ODBC on Windows and AIX?
>> o you are calling a procedure in the same database from each platform with
>> the same arguments o the procedure issues the same select from AIX and
>> Windows o the data being queried has not changed between the call to the
>> procedure from AIX and Windows o you are getting different result-sets on
>> each platform
>>
>> Then I have an issue with the Dumper output you sent as it has it is not of
>> the form you'd typically get back from a database i.e., it is a hashref
>> whose keys are hashrefs whose keys are hashrefs whose keys are hashrefs
>> whose keys are values. How can this be when a result-set has rows and
>> columns (2):
>>
>> #
>> # Windows ODBC
>> #
>> $VAR1 = {
>> 'SUMMARY' => {
>> '2' => {
>> '0004' => {
>> 'Adjusted_Fiscal_Year' => ' ',
>>
>> Can you show us the Perl code your running, give us some idea of the
>> procedure (what it does and what you expect it to return or cursors it
>> opens) and what you passed to Dumper.
>>
>> Then there is:
>>
>> '0004' => {
>> 'Adjusted_Fiscal_Year' =>
>> ' ',
>> 'Adjustment_Count' => '3',
>> 'Billing_Provider_ID' => '',
>> 'Billing_Provider_Type'
>> => '',
>> 'CLAIM_LINE_TCN' => '',
>> 'COUNTY_NAME' => 'KALAMAZOO',
>> 'City' => 'KALAMAZOO',
>> 'Credit_Dollars' => '0.00',
>> 'Debit_Dollars' => '2515.23',
>> 'EMailAddress' => undef,
>> 'FAX' => undef,
>> 'Fiscal_Years' =>
>> '2010-2011',
>> 'GA_MIP_Total' => '0.00',
>> 'GA_Non_MIP_Total' => '0.00',
>> 'GA_Reason' => 'Old
>> Invoices',
>> 'GA_Total' => '0.00',
>> 'Indx' => ' ',
>> => 'LCTN_CODE' => '03',
>> => 'PAY_ORDER_DATE' =>
>> '2011-09-22',
>>
>> which does not even seem to be valid Data::Dumper output to me.
>>
>> Also you keep referring to tags and I've no idea what you mean by that.
>>
>> Can you reduce the problem and describe it in a way which I/we can help you?
>> That is, reduce the problem to something we don't need inside knowledge to
>> understand and even better into a reproducible problem (although I
>> appreciate this can be difficult and I've not got teradata anyway).
>>
>> Martin
>>
>>> -----Original Message-----
>>> From: Martin J. Evans [mailto:[email protected]]
>>> Sent: Wednesday, September 28, 2011 3:50 PM
>>> To: Jeff Tate
>>> Cc: [email protected]
>>> Subject: Re: Strange happenings in ODBC
>>>
>>> On 28/09/2011 20:41, Jeff Tate wrote:
>>>> I am developing an app that pulls data from a Teradata data-server
>>>> through
>>> DBI, DBD::ODBC. It is developed on a Win32 platform, but targeted for
>>> an AIX platform.
>>>> In debugging a difference between the two platforms (after rigorous
>>>> code
>>> identity policing) I used Data::Dumper to print the in-memory image of
>>> the working data after running a stored procedure and then running
>>> 'fetchrow_hashref'. I have attached an edited file that shows:
>>>> .One tag retrieved only on AIX
>>>>
>>>> .Two tags named differently across the Win and AIX instances
>>>>
>>>> I have looked at obvious sources and not seen any warnings about
>>>> this. Can
>>> anybody tell me if this is a known issue, and if so whether there is a
>>> canonical way of handling it.
>>>> Thanx
>>>>
>>>>
>>> I'm maintain DBD::ODBC and I'm happy to try and help but with all
>>> respect I don't even know where to start with the information you have
>>> provided. You are calling a procedure which generates some sort of
>>> result-set and it returns different results when run to the same
>>> database with 2 different ODBC drivers on Windows and AIX at the same
>>> time? The possibilities are endless. If you care to narrow the problem
>>> down to something more specific someone who knows nothing about your
>>> systems can look in to I'll take another look.
>>>
>>> Martin
>>>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.