|
> JFinney wrote:
>
>Say, for instance, in traditional RPG logic +
>LF's, one would chain/reade (loop) a logical
>and, for each record, go to another loop and
>chain/reade based on a key (keeping it simple
>to start, assume the unique key to be one
>field from the original LF).
>
> What would the SQL statement look like to
>do the equivalent of what's just been explained
>in the previous paragraph ?
You can substitute SQL more or less directly in place of the native
constructs:
D LikeVar S 20
D TT# S 7S 0
D DescHdr S 30
D DescDtl S 50
D MatchOne S Like(LikeVar)
D Inz(*All'_')
D SqlCodHdr s 10i 0 inz
D SqlCodDtl s 10i 0 inz
* Set up the host variable
C Eval LikeVar='TOLL%'
* Pad the host variable with "match a single character"
C LikeVar Cat MatchOne:0 LikeVar
C* Define the cursor (sort of like an F spec)
C/Exec SQL Declare TTHCrsr Cursor for
C+ select ttnum,ttdesc from tthdr where ttdesc like :LikeVar order by 1
C/End-Exec
C/Exec SQL Declare TTDCrsr Cursor for
C+ select ttdata from ttdetail where tt# = :TT#
C/End-Exec
C* Open the header file (sort of like OPEN)
C/Exec SQL Open TTHCrsr
C/End-Exec
C* Read the header records
C Eval SqlCodHdr=0
C DoU SqlCodHdr<>0
C* (sort of like READE)
C/Exec SQL Fetch TTHCrsr into :TT#, :DescHdr
C/End-Exec
C Eval SqlCodHdr=SqlCod
C If SqlCodHdr=0
C* have a header record, get the corresponding detail
C* Open the detail file (sort of like OPEN)
C/Exec SQL Open TTDCrsr
C/End-Exec
C* Read the detail records
C Eval SqlCodDtl=0
C DoU SqlCodDtl<>0
C* (sort of like READE)
C/Exec SQL Fetch TTDCrsr into :DescDtl
C/End-Exec
C Eval SqlCodDtl=SqlCod
C If SqlCodDtl=0
C* your detail processing here
C EndIf
C* Close the cursor (sort of like CLOSE)
C/Exec SQL Close TTDCrsr
C/End-Exec
C EndDo
C EndIf
C EndDo
C* Close the cursor (sort of like CLOSE)
C/Exec SQL Close TTHCrsr
C/End-Exec
C Eval *INLR=*ON
Although you can use SQL this way, you may want to re-think your design.
SQL can do some cool things that native cannot, so a simple substitution may
not take advantage of the capabilities that SQL offers.
Buck Calabro
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2025 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.