Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion Groups
Database Servers
DB2InformixIngresMS SQLOraclePervasive.SQLPostgreSQLProgressSybase
Desktop Databases
FileMakerFoxProMS AccessParadox
General
General DB TopicsDatabase Theory
Related Topics
Java Development.NET DevelopmentVB DevelopmentMore Topics ...

Database Forum / DB2 Topics / February 2006

Tip: Looking for answers? Try searching our database.

Inapplicable message? DB2 UDB v8.1.9 Linux

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Bob Stearns - 15 Feb 2006 03:07 GMT
I am receiving what appears to me to be an inapplicable message from the
query below. The message is also below. I see no VALUES clause nor a set
operator (INTERSECT, DIFFERENCE, UNION) in the query. What am I missing?

SQL0415N The data types of corresponding columns are not compatible in a
fullselect that includes a set operator or in the multiple rows of a
VALUES clause of an INSERT or fullselect. SQLSTATE=42825

SELECT t7.BHID                                   as cow_bhid,
    t8.BHID                                   as calf_bhid,
    t2.herd_id                                as Cow_ID,
    t7L.namex                                 as Location,
    case
        when t8.sire_bhid IS NOT NULL
        THEN t8.sire_bhid
        when t1.BRED_TYPE='A'
        then t3s.herd_id
        when t1.BRED_TYPE='O'
        then t4s.herd_id
        when t1.BRED_TYPE='P'
        then t5s.herd_id
        when t1.BRED_TYPE='I'
        then t6s.herd_id
        when t1.BRED_TYPE='U'
        then 'Unknown'
    end                                           as Sire_ID,
    case
        when t1.BRED_TYPE='I'
        then t6d.herd_id
        else t8.dam_id
    end                                           as Donor_ID,
    case
        when t1.BRED_TYPE='I'
        then t6i.herd_id
        else t8.calf_id
    end                                           as Embryo_ID,
    t6i.bhid                                  as Emb_BHID,
    case t1.BRED_TYPE
        when 'A'
        then 'AI'
        when 'O'
        then 'Observed'
        when 'P'
        then 'Pasture'
        when 'I'
        then 'Embryo'
        when 'U'
        then 'Unknown'
        else 'None'
    end                                           as Bred_Via,
    char(t1.DATEX, USA)                       as Preg_Check_Date,
    t1.CALLED_DAYS,
    t1.BRED_DATE,
    char(t1.datex - t1.called_days days, USA) as called_date_bred,
    COALESCE(t8.sex,t1.called_sex)            as sex,
    char(due_date, USA)                       as due_date,
    rowx
FROM IS3.Animals t7
        left outer join table (    SELECT t8a.*,
                                    t8b.herd_id as calf_id,
                                    t8c.herd_id as sire_id,
                                    case
                                        when t8a.recip_bhid<>0
                                        then t8d.herd_id
                                    end             as donor_id
                                FROM is3.animals t8a
                                    left outer join is3.animals_priv t8b
                                    on t8b.bhid=t8a.bhid
                                    AND t8b.herd_owner_id=1
                                    join is3.animals_priv t8c
                                    on t8c.bhid=t8a.sire_bhid
                                    AND t8c.herd_owner_id=1
                                    join is3.animals_priv t8d
                                    on t8d.bhid=t8a.dam_bhid
                                    AND t8d.herd_owner_id=1
                                    join is3.weaning t8e
                                    on t8e.bhid=t8a.bhid
                                WHERE ( t8a.recip_bhid=t7.bhid
                                    OR ( t8a.dam_bhid=t7.bhid
                                    AND t8a.recip_bhid=0))
                                    AND t8a.birth_date>current_date-300 days
                                    AND t8e.weigh_date is null
        )
        t8
        on 0=0
        left outer join table (    SELECT t0.*,
                                    CASE t0.bred_type
                                        when 'I'
                                        then t0.BRED_DATE + 275 days
                                        when 'P'
                                        then
                                        case
                                            when called_days is null
                                            then t0.BRED_DATE + 283 days
                                            else t0.datex - called_days days +
                                            283 days
                                        end
                                        else t0.BRED_DATE + 283 days
                                    END
                                    AS due_date,
                                    ROW_NUMBER() OVER( PARTITION BY t0.bhid
                                    ORDER BY
                                        CASE t0.bred_type
                                            when 'I'
                                            then t0.BRED_DATE + 275 days
                                            when 'P'
                                            then
                                            case
                                                when called_days is null
                                                then t0.BRED_DATE + 283 days
                                                else t0.datex - called_days days
                                                + 283 days
                                            end
                                            else t0.BRED_DATE + 283 days
                                        END DESC NULLS LAST ) AS rowx
                                FROM is3.PREG_CHK as t0
                                WHERE t0.bhid=t7.bhid
                                    AND t8.bhid IS NULL
        )
        t1
        on T1.BHID=t7.BHID
        join IS3.locations t7L
        on T7.location=t7L.loc_id
        left outer join IS3.Animals_priv t2
        on T2.BHID=T7.BHID
        AND t2.herd_owner_id=1
        left outer join IS3.service_AI t3
        on T1.BHID=T3.cow_BHID
        AND t1.BRED_DATE = t3.datex
        left outer join IS3.Animals_priv t3S
        on T3.Bull_BHID=T3S.BHID
        AND t3S.HERD_OWNER_ID = 1
        left outer join IS3.service_Obs t4
        on T1.BHID=T4.cow_BHID
        AND t1.BRED_DATE = t4.datex
        left outer join IS3.Animals_priv t4S
        on T4.Bull_BHID=T4S.BHID
        AND t4S.HERD_OWNER_ID = 1
        left outer join IS3.service_Pasture t5
        on T1.BHID=T5.cow_BHID
        AND t1.BRED_DATE = t5.in_date
        left outer join IS3.Animals_priv t5S
        on T5.Bull_BHID=T5S.BHID
        AND t5S.HERD_OWNER_ID = 1
        LEFT OUTER JOIN TABLE(    SELECT t61.bhid,
                                    t62.SIRE_BHID,
                                    t62.DAM_BHID,
                                    t62.recip_bhid
                                FROM is3.et_implants t61
                                    join is3.animals t62
                                    on t61.bhid=t62.bhid
                                WHERE t62.recip_bhid=t1.bhid
                                    AND t61.datex=t1.bred_date
        )
        t6e
        on t6e.recip_bhid=t1.bhid
        left outer join IS3.Animals_priv t6I
        on T6e.BHID=T6I.BHID
        AND t6I.HERD_OWNER_ID = 1
        left outer join IS3.Animals_priv t6S
        on T6e.Sire_BHID=T6S.BHID
        AND t6S.HERD_OWNER_ID = 1
        left outer join IS3.Animals_priv t6D
        on T6e.Dam_BHID=T6D.BHID
        AND t6D.HERD_OWNER_ID = 1
WHERE t7.bhid in(    SELECT bhid
                    FROM is3.ANIMAL_SETS
                    WHERE SET_NAME='Junk_Cows'
                        AND USERID='jhough')
    AND (rowx=1
    OR rowx IS NULL)
ORDER BY Cow_ID
Serge Rielau - 15 Feb 2006 04:36 GMT
> I am receiving what appears to me to be an inapplicable message from the
> query below. The message is also below. I see no VALUES clause nor a set
[quoted text clipped - 172 lines]
>     OR rowx IS NULL)
> ORDER BY Cow_ID
Divide and conquer.....

Signature

Serge Rielau
DB2 Solutions Development
IBM Toronto Lab

Knut Stolze - 15 Feb 2006 07:45 GMT
>> I am receiving what appears to me to be an inapplicable message from the
>> query below. The message is also below. I see no VALUES clause nor a set
[quoted text clipped - 22 lines]
>>         then 'Unknown'
>>     end                                           as Sire_ID,
[...]

> Divide and conquer.....

Definitively!

I would guess it could be in one of the CASE expressions.

Oh, and a suggestion to the OP.  Expressions like this:

case
  when called_days is null
  then t0.BRED_DATE + 283 days
  else t0.datex - called_days days + 283 days
end

can be rephrased to:

COALESCE(t0.datex - called_days days + 283 days, t0.BRED_DATE + 283 days)

Note that the datetime expression involving "called_days" will evaluate to
NULL if called_days is NULL.

Signature

Knut Stolze
DB2 Information Integration Development
IBM Germany

Tonkuma - 15 Feb 2006 09:18 GMT
I guess some of t8.sire_bhid, t3s.herd_id, etc. in the following
expression(The last row is " then 'Unknown' ") are not CHARACTER type.

       case
               when t8.sire_bhid IS NOT NULL
               THEN t8.sire_bhid
               when t1.BRED_TYPE='A'
               then t3s.herd_id
               when t1.BRED_TYPE='O'
               then t4s.herd_id
               when t1.BRED_TYPE='P'
               then t5s.herd_id
               when t1.BRED_TYPE='I'
               then t6s.herd_id
               when t1.BRED_TYPE='U'
               then 'Unknown'
       end                                           as Sire_ID

One reason I guessed so, is that you treat sometime xxxx_bhid or
xxxx_id as number.
For example:
.....
t8a.recip_bhid<>0
.....
t8a.recip_bhid=0
.....
t8d.herd_owner_id=1
Tonkuma - 16 Feb 2006 10:54 GMT
Or simply change 'Unknown' to number or NULL.

       case
               when t8.sire_bhid IS NOT NULL
               THEN t8.sire_bhid
               when t1.BRED_TYPE='A'
               then t3s.herd_id
               when t1.BRED_TYPE='O'
               then t4s.herd_id
               when t1.BRED_TYPE='P'
               then t5s.herd_id
               when t1.BRED_TYPE='I'
               then t6s.herd_id
               when t1.BRED_TYPE='U'
               then NULL
       end                                           as Sire_ID
Tonkuma - 16 Feb 2006 10:56 GMT
Or change 'Unknown' to number or NULL.

       case
               when t8.sire_bhid IS NOT NULL
               THEN t8.sire_bhid
               when t1.BRED_TYPE='A'
               then t3s.herd_id
               when t1.BRED_TYPE='O'
               then t4s.herd_id
               when t1.BRED_TYPE='P'
               then t5s.herd_id
               when t1.BRED_TYPE='I'
               then t6s.herd_id
               when t1.BRED_TYPE='U'
               then NULL
       end                                           as Sire_ID
Bob Stearns - 16 Feb 2006 22:29 GMT
>>>I am receiving what appears to me to be an inapplicable message from the
>>>query below. The message is also below. I see no VALUES clause nor a set
[quoted text clipped - 45 lines]
> Note that the datetime expression involving "called_days" will evaluate to
> NULL if called_days is NULL.

Thanks for the suggestion. It was a CASE statement with mismatched THEN
results.

My original objection still stands though: the error neither involved
VALUES nor set operations. The message gives no clue where or what the
problem is.
Serge Rielau - 17 Feb 2006 00:34 GMT
>>>> I am receiving what appears to me to be an inapplicable message from
>>>> the
[quoted text clipped - 57 lines]
> VALUES nor set operations. The message gives no clue where or what the
> problem is.
You should have gotten this:
db2 => values case when 1=1 then 1 when 1=1 then 'b' end;
SQL0581N  The data types of the result-expressions of a CASE expression
are not compatible.  SQLSTATE=42804

If you would be so kind to send me a repro by email.
I'll take a peek and see to it that it gets fixed.

Cheers
Serge

Signature

Serge Rielau
DB2 Solutions Development
IBM Toronto Lab

Knut Stolze - 17 Feb 2006 07:31 GMT
> You should have gotten this:
> db2 => values case when 1=1 then 1 when 1=1 then 'b' end;
[quoted text clipped - 3 lines]
> If you would be so kind to send me a repro by email.
> I'll take a peek and see to it that it gets fixed.

Serge, does DB2 do (some) rewrite before it verifies the data types?  In
that case I could understand why the error message of the OP was returned.
(Which should not be an excuse for the message not being helpful.)

Signature

Knut Stolze
DB2 Information Integration Development
IBM Germany

Serge Rielau - 17 Feb 2006 13:00 GMT
>>You should have gotten this:
>>db2 => values case when 1=1 then 1 when 1=1 then 'b' end;
[quoted text clipped - 7 lines]
> that case I could understand why the error message of the OP was returned.
> (Which should not be an excuse for the message not being helpful.)

No, superficially type mismatches in CASE _expression_ should be caught
during parsing, that's why I want a repro.

Cheers
Serge
Signature

Serge Rielau
DB2 Solutions Development
IBM Toronto Lab

 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2009 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.