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



As others have said, you're looking at "static" sql.

The statement itself can't be changed, but you're allowed to use host
variables so that the compare values can be changed.

"static" is prefered over "dynamic" as the statement is analysed at compile
time, rather than having to be analysed at run-time.

There's really only a single instance where you need really dynamic SQL,
that's when the affected table isn't known till run-time. Even in that
instance, at least on the IBM i, you might be able to use a static
statement with an OVRDBF done ahead of time.

The only other reason to use dynamic is just because you can build a
simpler/cleaner statement instead of including a bunch of conditionals in
the static version.

Charles



On Wed, May 11, 2016 at 12:18 PM, paultherrien <
paultherrien@xxxxxxxxxxxxxxxxxx> wrote:

We are on IBM I V7R1.

I have a question:

When using a cursor in SQL with variable values do you NEED to use a
prepare
statement with a variable marker, (a question mark (?)), and then execute
‘OPEN
… USING’ with the variable values?

I thought this sort of construct was required when the selection variables
values were ... well, variable.

I have come across code that I thought would not work….

An SQL declare statement loaded in the *INZSR subroutine….

C/EXEC SQL
C+
C+ declare @cursorDft999 Cursor for
C+ Select zbsrtp from zbsrcefe
C+ Where zbcmp# = :zbcmp# and zbprcd = :zbprcd
C+ and zbtrnm = :zbtrnm
C+ and zbsrcd like '999%'
C+ Order by zbcrcd desc
C+
C/END-EXEC

And then in a seperate subroutine …

begsr $get_zbsrtp;

C/EXEC SQL
C+ OPEN @cursorDft999
C/END-EXEC

C/EXEC SQL
C+ FETCH NEXT FROM @cursorDft999
C+ into :srtp
C/END-EXEC

If Sqlcod = *Zeros;
zbsrtp = srtp;
Endif;

C/EXEC SQL
C+ Close @cursorDft999
C/END-EXEC

endsr;

At each execution of the subroutine the values of ZBCMP#, ZBPRCD, and
ZBTRNM
are different depending on the data being processed.

I would have sworn this was not going to work as coded above. I thought
one
needed to use the ‘OPEN …. USING’ syntax.

Any comments appreciated.

(Feeling a bit dim-witted today)

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

Please contact support@xxxxxxxxxxxx for any subscription related
questions.

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
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.