× 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.



If you notice I did it on the host variable, not the field coming from the table. Since I casted it to the match the field in the file, then it would still use the access path and not do a full table scan. Since you cannot send imagines through here, I will send it to you privately.

-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Dennis Lovelady
Sent: Tuesday, October 12, 2010 8:44 AM
To: 'RPG programming on the IBM i / System i'
Subject: RE: Astonished by embedded sql

It is considered bad form to put a function/formula on a WHERE clause since
that causes SQL to have to process the full table. In this case, we would
be scanning a whole table in order to return one row!

Dennis Lovelady
http://www.linkedin.com/in/dennislovelady
--
"A government which robs Peter to pay Paul can always depend on the support
of Paul."
-- George Bernard Shaw


I don't anything "technically" wrong... I would suggest though that you
change it from a prepared statement to a regular statement using a host
variable.

i.e.

Begsr mysr

Exec SQL
Declare C2 Cursor For
Select * from myfile
Where myfield = char(:someDateField);

Exec SQL
Open C2;

If SqlCod < 0;
//Treat error
EndIf;

DoU SqlCod <> 0;
Exec SQL
Fetch Next from C2 Into :MyFile_DS;
If SqlCod < 0;
Leave;
Endif;
...
Leave;

EndDo;

Exec SQL
Close C2;

EndSr;

Doing it this way will prevent the prepare from occurring over and over
again.

To answer the other question, a chain wouldn't work because the
original programmer must have thought that he could get multiple
records from this file based on the where clause. That being said, a
regular I/O setll and reade would have been just as good.

Something else to keep in mind about SQL. If you write SQL code
correctly, you wouldn't have to make compile changes to programs using
SQL. However, since the programmer did a "select * " into the DSPECS
of the formatted like the external file, this program would need to be
recompiled because the DSPECS would have changed and you would likely
get sqlcod other than 0. Try to convince the programmer to select only
the fields they need. This will also help with the data retrieval in
the fetch statement.

-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx [mailto:rpg400-l-
bounces@xxxxxxxxxxxx] On Behalf Of David FOXWELL
Sent: Tuesday, October 12, 2010 6:50 AM
To: RPG programming on the IBM i / System i
Subject: RE: Astonished by embedded sql

-----Message d'origine-----
De : rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx] De la part de Dennis Lovelady

It seems to me that this is the equivalent of opening
myfile for each
subroutine call, reading every record in the file then closing the
file again.

Yes, that's right.

Although I'm not sure about the reading. Is the whole file
read at the
open cursor statement?

No, but it is read in its entirety at the DoU loop. (FETCH does the
lifting.)

Thanks, Dennis. But if the FETCH was executed more than once, it
wouldn't be read in its entirety a second time, would it?

By the way, I didn't think FETCH into *qualified* DS did
quite what we would hope. Perhaps I am mistaken on that.

I didn't even notice. That's going too far! How do you suggest breaking
all this to the person who wrote it?
--
This is the RPG programming on the IBM i / System i (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.

--
This is the RPG programming on the IBM i / System i (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.