× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



I just did a test with visual explain, three statements to see the difference. In each case I am using a constant (71) where I would embed a host variable reference if I were doing this from RPG.

in predicate with column name on left:
select * from jcjobf
where cusno in (0, 71)

Visual Explain: index probe -> rrn Scan -> Table Probe -> Final Select

in predicate with column name on right
select * from jcjobf
where 71 in (0, cusno)

Visual Explain: Table Scan -> Final Select (as you suggested would be the case)

finally using case expression to filter out missing values
select * from jcjobf
where cusno = case when 71 = 0 then cusno else 71 end

Visual Explain: Table Scan -> Final Select

As you can see, using a case expression does not allow the optimizer to use an access path either. Maybe a dynamic sql with the appropriate where clause would perform better in some cases.


Mark Murphy
STAR BASE Consulting, Inc.
mmurphy@xxxxxxxxxxxxxxx


-----"Birgitta Hauser" <Hauser@xxxxxxxxxxxxxxx> wrote: -----
To: "'RPG programming on the IBM i \(AS/400 and iSeries\)'" <rpg400-l@xxxxxxxxxxxx>
From: "Birgitta Hauser" <Hauser@xxxxxxxxxxxxxxx>
Date: 10/01/2015 01:05PM
Subject: AW: AW: Syntax for Insert into using an rpg data structure, 1 row

Where :HostInput1 in (0,Column1)
and :HostInput2 in (' ', Column2)
With your solution, the optimizer cannot use any access path over column1
and column2!

Mit freundlichen Grüßen / Best regards

Birgitta Hauser

"Shoot for the moon, even if you miss, you'll land among the stars." (Les
Brown)
"If you think education is expensive, try ignorance." (Derek Bok)
"What is worse than training your staff and losing them? Not training them
and keeping them!"

-----Ursprüngliche Nachricht-----
Von: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxx] Im Auftrag von
darren@xxxxxxxxx
Gesendet: Thursday, 01.10 2015 17:09
An: RPG programming on the IBM i (AS/400 and iSeries)
Betreff: Re: AW: Syntax for Insert into using an rpg data structure, 1 row


Declare MyCursor Cursor For
Select ...
From ...
Where Column1 = Case when :HostInput1 <> 0 then :HostInput1 Else
Column1 End
And Column2 = Case When :HostInput <> '' then :HostInput2
Else
Column2 End
And Column3 > '2000-01-01' Then :HostInput3 else Column3 End
....
Order By Case When :Sort = 1 Then Column1 End, Case When :Sort = 1
Then
Column4 End


I've discovered a little trick as an alternative to the case statement for
equal type comparisons. It reverses the traditional usage of host
variables. Here is the statement rewritten as an example:

Declare MyCursor Cursor For
Select ...
From ...
Where :HostInput1 in (0,Column1)
and :HostInput2 in (' ', Column2)

--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To subscribe,
unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at
http://archive.midrange.com/rpg400-l.



As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.