Sunteți pe pagina 1din 50

Embedded SQL

Its a way of embedding the SQL statements in our RPG source code.


Types of Embedded SQL
Static SQL
o This is the simplest way of implementing SQL. In this the SQL statement
is hard coded in the program.
Dynamic SQL
o The SQL statement is dynamic in nature and can be changed at runtime
based on the parameter input
o It requires more resource at run-time for preparing the statement



Source member type
SQLRPG
SQLRPGLE




Compilation command
Create SQL RPG Program (CRTSQLRPG)
Create SQL ILE RPG Object (CRTSQLRPGI)



Compilation process
The compilation of embedded SQL is different than the normal RPG program.
The compilation is divided into 2 parts:

(1) SQL precompilation: To validate the embedded SQL in the program and convert
those into dynamic program calls. If there is any error in host variable or in SQL
statement selection fields or any other sql statement related error, then the compilation
stops and SQL precompilation report is generated.

We can check the converted source by seeing the spool file of the program. The
converted source includes SQL communication area and many sql-call commands to
open, process and close sql cursors.
e.g.

CALL SQLOPEN
PARM SQLCA
PARM SQL_00000

CALL SQLROUTE
PARM SQLCA
PARM SQL_00000


CALL SQLCLSE
PARM SQLCA
PARM SQL_00032


(2) Main program compilation: After there is no error in SQL precompilation then only
the main program is compiled and the successful compilation report is generated.



Embedded SQL structure

The embedded SQL always comes under a block of EXEC and END-EXEC.
e.g.

C/EXEC SQL
C+ SET OPTION COMMIT=*NONE
C/END-EXEC
*
C/EXEC SQL
C+ EXECUTE IMMEDIATE :SQLSTMT1
C/END-EXEC

C/EXEC SQL
C+ DECLARE C1 CURSOR FOR select count(*), PARTY from AMIT/ACCSUBPF
C+ group by PARTY order by PARTY
C/END-EXEC

C/EXEC SQL
C+ FETCH FROM C1 INTO :S_COUNT, :W_PNUM1
C/END-EXEC

C/EXEC SQL
C+ OPEN C1
C/END-EXEC

C/EXEC SQL
C+ CLOSE C1
C/END-EXEC



Host Variables
Host variable are used when we want to pass parameter or fetch result while
executing SQL.
Host variables are always preceded in SQL by a semi-colon.
In the below example S_COUNT, W_PNUM1,VAR1 is host variables.

C/EXEC SQL
C+ FETCH FROM C1 INTO :S_COUNT, :W_PNUM1
C/END-EXEC


C/EXEC SQL
C+ DECLARE C1 CURSOR FOR select count(*), PARTY from AMIT/ACCSUBPF
C+ group by :VAR1 order by :VAR1
C/END-EXEC




Embedded SQL creation steps
Normal program cycle of embedded SQL consists of the steps given below:
1. Declaring the CURSOR.
2. Opening the CURSOR.
3. Fetching the record from the cursor one by one by checking the record found
condition.
4. Successful record found condition is checked by the condition SQLCOD=0
5. Record not found condition is checked by the condition SQLCOD=100
6. The error condition is checked by SQLCOD<0
7. After all the records have been fetched we close the cursor.


0046.00 C/EXEC SQL
0047.00 C+ DECLARE C1 SCROLL CURSOR FOR >>>>>>>>>>> Declaring the
CURSOR
0048.00 C+ select PNAME, PNUM,PADDR from AMIT/PARTYD
0049.00 C+ order by PNUM
0050.00 C/END-EXEC
0051.00 *
0052.00 *
0053.00 C/EXEC SQL
0054.00 C+ OPEN C1 >>>>>>>>>>>>> Opening the
CURSOR
0055.00 C/END-EXEC
0056.00 *
0057.00 C/EXEC SQL
0058.00 C+ FETCH FIRST FROM C1 INTO :S_PNUM, :S_PNAME,:S_PADDR >>> Fetch First
record from
0059.00 C/END-EXEC the CURSOR
0060.00 *
0061.00 C DOW SQLCOD=0 >>>>> Check the record found
condition
0062.00 C EVAL RRN=RRN+1
0063.00 C IF RRN>9999
0064.00 C LEAVE
0065.00 C ENDIF
0066.00 C WRITE EMBED_SFL
0067.00 C/EXEC SQL
0068.00 C+ FETCH NEXT FROM C1 INTO :S_PNUM, :S_PNAME,:S_PADDR >>>> Fetch next record
one by one
0069.00 C/END-EXEC
0070.00 C IF SQLCOD<0 >>>>>>>>>> Check for any
error
0071.00 C LEAVE
0072.00 C ENDIF
0073.00 C IF SQLCOD=100 >>>> Check for record not found
condition
0074.00 C SETON 45
0075.00 C LEAVE
0076.00 C ENDIF
0077.00 C ENDDO
0078.00 *
0079.00 *
0080.00 C/EXEC SQL
0081.00 C+ CLOSE C1 >>>>>>>>>>>> Close the CURSOR
0082.00 C/END-EXEC

Some other steps can also be involved in case of dynamic embedded SQL:

EXECUTE IMMEDIATE
Prepares and executes a statement that does not use any host variables.

PREPARE
Turns the character string form of the SQL statement into an executable form of the statement,
which when executed gives the result set.

EXECUTE
Executes a previously prepared SQL statement.




SQLCA (SQL communications area), SQLCOD (SQL code) and SQLSTT
(SQL state)
An SQLCA is a data structure whose subfields get updated after the execution of
any embedded SQL.
The subfields most used in SQLCA are SQLCOD and SQLSTT.
SQLCOD
It Contains SQL return code which can be tested for successful or unsuccessful
execution of an sql statement.
If SQLCOD=0, represents successful execution.
If SQLCOD>0, represents successful execution with some warnings.
If SQLCOD<0, represents unsuccessful execution with errors.
e.g.
SQLCOD=100; Row not found
SQLCOD=-552; Not authorized to an object

SQLSTATE
SQLSTATE is similar to SQLCODE but it returns more specific status code.
It consists of five characters in which the first two characters comprise of a code that
defines the class as depicted below:
Class '00': It represents successful execution.
Class '01': It also represents successful execution but with warnings.
Class '02' It represents no data found.
All other classes represents unsuccessful executions.

Below is the structure of SQL communication area.


D* SQL Communications area
D SQLCA DS
D SQLCAID 8A INZ(X'0000')
D SQLAID 8A OVERLAY(SQLCAID)
D SQLCABC 10I 0
D SQLABC 9B 0 OVERLAY(SQLCABC)
D SQLCODE 10I 0
D SQLCOD 9B 0 OVERLAY(SQLCODE)
>>>>>>>>>>>>>>>>>>>>>>>
D SQLERRML 5I 0
D SQLERL 4B 0 OVERLAY(SQLERRML)
D SQLERRMC 70A
D SQLERM 70A OVERLAY(SQLERRMC)
D SQLERRP 8A
D SQLERP 8A OVERLAY(SQLERRP)
D SQLERR 24A
D SQLER1 9B 0 OVERLAY(SQLERR:*NEXT)
D SQLER2 9B 0 OVERLAY(SQLERR:*NEXT)
D SQLER3 9B 0 OVERLAY(SQLERR:*NEXT)
D SQLER4 9B 0 OVERLAY(SQLERR:*NEXT)
D SQLER5 9B 0 OVERLAY(SQLERR:*NEXT)
D SQLER6 9B 0 OVERLAY(SQLERR:*NEXT)
D SQLERRD 10I 0 DIM(6) OVERLAY(SQLERR)
D SQLWRN 11A
D SQLWN0 1A OVERLAY(SQLWRN:*NEXT)
D SQLWN1 1A OVERLAY(SQLWRN:*NEXT)
D SQLWN2 1A OVERLAY(SQLWRN:*NEXT)
D SQLWN3 1A OVERLAY(SQLWRN:*NEXT)
D SQLWN4 1A OVERLAY(SQLWRN:*NEXT)
D SQLWN5 1A OVERLAY(SQLWRN:*NEXT)
D SQLWN6 1A OVERLAY(SQLWRN:*NEXT)
D SQLWN7 1A OVERLAY(SQLWRN:*NEXT)
D SQLWN8 1A OVERLAY(SQLWRN:*NEXT)
D SQLWN9 1A OVERLAY(SQLWRN:*NEXT)
D SQLWNA 1A OVERLAY(SQLWRN:*NEXT)
D SQLWARN 1A DIM(11) OVERLAY(SQLWRN)
D SQLSTATE 5A
D SQLSTT 5A OVERLAY(SQLSTATE)
>>>>>>>>>>>>>>>>>>>>>>
D* End of SQLCA





CURSOR
A cursor is a temporary result set area created in the system memory when an
embedded SQL statement is executed.
A cursor contains information on the statement executed and the rows of data
accessed by it.
This temporary result set area contains the data retrieved from the database, and
manipulate this data.
A cursor can hold more than one row, but can process only one row at a time.
The set of rows the cursor holds is called the active set.

Types of CURSOR:
There are 2 types of cursor:

I. Sequential / Serial Cursor
A sequential cursor is one defined without SCROLL key word
For serial cursor each row is fetched only once per OPEN.

Example

0051.00 *
0052.00 C/EXEC SQL
0053.00 C+ DECLARE C1 CURSOR FOR select count(*), PARTY from AMIT/ACCSUBPF
0054.00 C+ group by PARTY order by PARTY
0055.00 C/END-EXEC
0056.00
0057.00 C/EXEC SQL
0058.00 C+ DECLARE C2 CURSOR FOR select PNAME, PNUM from AMIT/PARTYD
0059.00 C+ order by PNUM
0060.00 C/END-EXEC
0061.00 *
0062.00 *
0063.00 C/EXEC SQL
0064.00 C+ OPEN C1
0065.00 C/END-EXEC
0066.00 *
0067.00 C/EXEC SQL
0068.00 C+ OPEN C2
0069.00 C/END-EXEC
0070.00 *
0071.00 C DOW SQLCOD=0
0072.00 C/EXEC SQL
0073.00 C+ FETCH FROM C1 INTO :S_COUNT, :W_PNUM1
0074.00 C/END-EXEC
0075.00 C/EXEC SQL
0076.00 C+ FETCH FROM C2 INTO :S_PNAME, :W_PNUM2
0077.00 C/END-EXEC
0078.00 C IF SQLCOD<0
0079.00 C LEAVE
0080.00 C ENDIF
0081.00 C IF SQLCOD=100
0082.00 C SETON 45
0083.00 C LEAVE
0084.00 C ENDIF
0085.00 C IF W_PNUM1<>W_PNUM2
0086.00 C ITER
0087.00 C ENDIF
0088.00 C EVAL RRN=RRN+1
0089.00 C IF RRN>9999
0090.00 C LEAVE
0091.00 C ENDIF
0092.00 C EVAL S_PNUM=W_PNUM1
0093.00 C WRITE EMBED_SFL
0094.00 C ENDDO
0095.00 *
0096.00 C/EXEC SQL
0097.00 C+ CLOSE C1
0098.00 C/END-EXEC
0099.00 *
0100.00 C/EXEC SQL
0101.00 C+ CLOSE C2
0102.00 C/END-EXEC



II. Scrollable Cursor
It is defined with SCROLL key word.
Rows of cursor can be fetched many times.
When the FETCH is issued, the cursor is positioned to the row of the cursor table
as per the used keywords FIRST, LAST, PREV, NEXT, RELATIVE.
The following key words are supported when fetching data from a scrollable
cursor:
NEXT It will FETCH the next row. Simple FETCH operation without NEXT
does the same thing.
FETCH It will retrieve the result set record into the host variable mentioned.
PRIOR It will FETCH the previous row with respect to the current row.
FIRST It will FETCH the first row in the results set.
LAST - It will FETCH the last row in the results set
CURRENT It will re-FETCH the current row from the result set.
BEFORE It will positions the cursor before the first row of the results set.
AFTER It will positions the cursor after the last row of the results set.
RELATIVE n It will FETCH the row that is n rows away from the last row
fetched. Here n can be 0,+ve or ve integer.

Example
0046.00 C/EXEC SQL
0047.00 C+ DECLARE C1 SCROLL CURSOR FOR
0048.00 C+ select PNAME, PNUM,PADDR from AMIT/PARTYD
0049.00 C+ order by PNUM
0050.00 C/END-EXEC
0051.00 *
0052.00 *
0053.00 C/EXEC SQL
0054.00 C+ OPEN C1
0055.00 C/END-EXEC
0056.00 *
0057.00 C/EXEC SQL
0058.00 C+ FETCH LAST FROM C1 INTO :S_PNUM, :S_PNAME,:S_PADDR
0059.00 C/END-EXEC
0060.00 *
0061.00 C DOW SQLCOD=0
0062.00 C EVAL RRN=RRN+1
0063.00 C IF RRN>9999
0064.00 C LEAVE
0065.00 C ENDIF
0066.00 C WRITE EMBED_SFL
0067.00 C/EXEC SQL
0068.00 C+ FETCH PRIOR FROM C1 INTO :S_PNUM, :S_PNAME,:S_PADDR
0069.00 C/END-EXEC
0070.00 C IF SQLCOD<0
0071.00 C LEAVE
0072.00 C ENDIF
0073.00 C IF SQLCOD=100
0074.00 C SETON 45
0075.00 C LEAVE
0076.00 C ENDIF
0077.00 C ENDDO
0078.00 *
0079.00 *
0080.00 C/EXEC SQL
0081.00 C+ CLOSE C1
0082.00 C/END-EXEC




*** SENSETIVE & INSENSITIVE CURSOR


In SENSETIVE cursor the current updated data is fetched from the database. Hence if any kind
of updating or insertion happens in the database the cursor is modified accordingly to provide the
latest data.

In INSENSITIVE cursor, the data is copied to a temporary memory and then the cursor fetches
the data from there. Therefore, modifications made to the database tables are not reflected in the
data returned by fetches made to this cursor.

DECLARE C1 SENSITIVE SCROLL CURSOR
FOR SELECT * FROM PARTYD



Embedded SQL Example Using 2 sequential cursors


Physical file used in the program: PARTYD

PNAME PNUM PADDR OPNDD OPNMM OPNYY OPNSTS
000001 UPI P00000000001 CHENNAI 1 1 2,010 2
000002 SHRI P00000000002 EMPHAL 2 3 2,009 2
000003 SHMANT P00000000003 CHENNAI 3 5 2,011 2
000004 AFTAB P00000000007 HOMEIIEA 13 1 2,010 2
000005 AMI P00000000008 HELLY CORN 12 12 2,012 2
000006 JPY P00000000009 JEKINSAN 11 11 2,011 2
000007 SHANN P00000000010 KUPUNUS 24 1 2,012 2
000008 HAPART P00000000011 KOLINSA 16 1 2,010 2
****** ******** End of report ********





Physical file used in the program: ACCSUBPF

ORG CODE ACC NUMBER CURRENCY ACCOUNT MNG COUNTRY PARTY
190 A00000000001 EUR DFJASHN NKDAHFJ P00000000001
191 A00000000002 USD DAJFK DAJH P00000000001
192 A00000000003 TRY DAHB BJDKFA P00000000001
190 A00000000011 EUR NDJA CINE P00000000002
193 A00000000004 USD KIRAN NDKAL P00000000001
194 A00000000005 KWR DANK NKD P00000000001
190 A00000000001 USD MING CHINA P00000000003
191 A00000000002 TRY JHINGA CHINA P00000000003
190 A00000000021 USD DFKAF NKDA P00000000002
190 A00000000011 EUR NDJA CINE P00000000002
190 A00000000021 USD DFKAF NKDA P00000000002
190 A00000000001 USD MING CHINA P00000000003
191 A00000000002 TRY JHINGA CHINA P00000000003
190 A00000000001 EUR DFAKLSJN NDOAF P00000000007
191 A00000000002 USD KJDANFK NKDA P00000000007
190 A00000000001 EUR DFAKLSJN NDOAF P00000000007
191 A00000000002 USD KJDANFK NKDA P00000000007
195 A00000000006 TRY APPRINA SOUTN P00000000001
195 A00000000007 USD SONATNA SOUTN P00000000001



Display file used in the program: EMBED_DSP
Columns . . . : 1 80 Browse
AMIT/QRPGLESRC
SEU==>
EMBED_DSP
FMT DP
.....AAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions+++++++++++++++++++++++++++
************ Beginning of data
*********************************************************
0001.00 A DSPSIZ(24 80 *DS3)
0002.00 A CA03(03 'EXIT')
0003.00 A R EMBED_SFL SFL
0004.00 A S_PNUM 12A O 7 13
0005.00 A S_PNAME 12A O 7 35
0006.00 A S_COUNT 2S 0O 7 58
0007.00 A R EMBED_CTL SFLCTL(EMBED_SFL)
0007.01 A OVERLAY
0008.00 A 42 SFLDSP
0009.00 A 41 SFLDSPCTL
0010.00 A 40 SFLCLR
0011.00 A 45 SFLEND(*MORE)
0012.00 A SFLSIZ(0011)
0013.00 A SFLPAG(0010)
0014.00 A FIRSTRRN 4S 0H SFLRCDNBR(CURSOR)
0015.00 A 1 28'PARTY ACCOUNT INFORMATION'
0016.00 A 1 73DATE
0017.00 A EDTCDE(Y)
0018.00 A 2 73TIME
0019.00 A 6 13'PARTY NUMBER'
0020.00 A DSPATR(HI)
0021.00 A 6 36'PARTY NAME'
0022.00 A DSPATR(HI)
0023.00 A 6 52'NO. OF ACCOUNTS'
0024.00 A DSPATR(HI)
0025.00 A R FOOTER
0026.00 A 24 3'F3 = EXIT'
****************** End of data
*********************************************************


PROGAM


*************** Beginning of data *************************************
HDEBUG(*YES)
HOPTION(*NODEBUGIO)
FEMBED_DSP CF E WORKSTN
F SFILE(EMBED_SFL:RRN)
F INFDS(infds)
*
Dinfds DS
DRECNO 378 379I 0
*
DARR S 10 DIM(9)
D PERRCD(3)
D CTDATA
*
DW_PNUM1 S 12A INZ(*BLANKS)
DW_PNUM2 S 12A INZ(*BLANKS)
C *IN03 DOWEQ *OFF
C 03 LEAVE
C EXSR DSPSFL
C ENDDO
C SETON LR
C*
C*_________________________________________________
C*_______________CLEAR SUBFILE_____________________
C*_________________________________________________
C CLRSFL BEGSR
C EVAL RRN=0
C SETON 40
C WRITE EMBED_CTL
C SETOFF 40
C ENDSR
C*_________________________________________________
C*_______________FIRST FUBROUTINE__________________
C*_________________________________________________
C*
C *INZSR BEGSR
C SETOFF 404142
C SETOFF 45
C Z-ADD *ZEROS RRN 4 0
C EVAL FIRSTRRN=1
C EXSR CLRSFL
C EXSR FILSFL
C EXSR DSPSFL
C ENDSR
C*_________________________________________________
C*_______________FILL SUBFILE__________________
C*_________________________________________________
C*
C FILSFL BEGSR
C
C EVAL RRN=0
*
C/EXEC SQL
C+ DECLARE C1 CURSOR FOR select count(*), PARTY from AMIT/ACCSUBPF
C+ group by PARTY order by PARTY
C/END-EXEC

C/EXEC SQL
C+ DECLARE C2 CURSOR FOR select PNAME, PNUM from AMIT/PARTYD
C+ order by PNUM
C/END-EXEC
*
*
C/EXEC SQL
C+ OPEN C1
C/END-EXEC
*
C/EXEC SQL
C+ OPEN C2
C/END-EXEC
*
C DOW SQLCOD=0
C/EXEC SQL
C+ FETCH FROM C1 INTO :S_COUNT, :W_PNUM1
C/END-EXEC
C/EXEC SQL
C+ FETCH FROM C2 INTO :S_PNAME, :W_PNUM2
C/END-EXEC
C IF SQLCOD<0
C LEAVE
C ENDIF
C IF SQLCOD=100
C SETON 45
C LEAVE
C ENDIF
C IF W_PNUM1<>W_PNUM2
C ITER
C ENDIF
C EVAL RRN=RRN+1
C IF RRN>9999
C LEAVE
C ENDIF
C EVAL S_PNUM=W_PNUM1
C WRITE EMBED_SFL
C ENDDO
*
C/EXEC SQL
C+ CLOSE C1
C/END-EXEC
*
C/EXEC SQL
C+ CLOSE C2
C/END-EXEC
C ENDSR
C*_________________________________________________
C*
C DSPSFL BEGSR
C SETON 4142
C IF RRN<=0
C SETOFF 42
C ENDIF
C WRITE FOOTER
C EXFMT EMBED_CTL
C EVAL FIRSTRRN=RECNO
C SETOFF 4142
C ENDSR
****************** End of data ****************************************


OUTPUT
PARTY ACCOUNT INFORMATION 2/14/13
03:54:22



PARTY NUMBER PARTY NAME NO. OF ACCOUNTS
P00000000001 UPI 07
P00000000002 SHRI 04
P00000000003 SHMANT 04
P00000000007 AFTAB 04


Bottom


F3 = EXIT




Embedded SQL Example Using 2 sequential cursors


Physical file used in the program: PARTYD

PNAME PNUM PADDR OPNDD OPNMM OPNYY OPNSTS
000001 UPI P00000000001 CHENNAI 1 1 2,010 2
000002 SHRI P00000000002 EMPHAL 2 3 2,009 2
000003 SHMANT P00000000003 CHENNAI 3 5 2,011 2
000004 AFTAB P00000000007 HOMEIIEA 13 1 2,010 2
000005 AMI P00000000008 HELLY CORN 12 12 2,012 2
000006 JPY P00000000009 JEKINSAN 11 11 2,011 2
000007 SHANN P00000000010 KUPUNUS 24 1 2,012 2
000008 HAPART P00000000011 KOLINSA 16 1 2,010 2
****** ******** End of report ********





Physical file used in the program: ACCSUBPF

ORG CODE ACC NUMBER CURRENCY ACCOUNT MNG COUNTRY PARTY
190 A00000000001 EUR DFJASHN NKDAHFJ P00000000001
191 A00000000002 USD DAJFK DAJH P00000000001
192 A00000000003 TRY DAHB BJDKFA P00000000001
190 A00000000011 EUR NDJA CINE P00000000002
193 A00000000004 USD KIRAN NDKAL P00000000001
194 A00000000005 KWR DANK NKD P00000000001
190 A00000000001 USD MING CHINA P00000000003
191 A00000000002 TRY JHINGA CHINA P00000000003
190 A00000000021 USD DFKAF NKDA P00000000002
190 A00000000011 EUR NDJA CINE P00000000002
190 A00000000021 USD DFKAF NKDA P00000000002
190 A00000000001 USD MING CHINA P00000000003
191 A00000000002 TRY JHINGA CHINA P00000000003
190 A00000000001 EUR DFAKLSJN NDOAF P00000000007
191 A00000000002 USD KJDANFK NKDA P00000000007
190 A00000000001 EUR DFAKLSJN NDOAF P00000000007
191 A00000000002 USD KJDANFK NKDA P00000000007
195 A00000000006 TRY APPRINA SOUTN P00000000001
195 A00000000007 USD SONATNA SOUTN P00000000001



Display file used in the program: EMBED_DSP
Columns . . . : 1 80 Browse
AMIT/QRPGLESRC
SEU==>
EMBED_DSP
FMT DP
.....AAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions+++++++++++++++++++++++++++
************ Beginning of data
*********************************************************
0001.00 A DSPSIZ(24 80 *DS3)
0002.00 A CA03(03 'EXIT')
0003.00 A R EMBED_SFL SFL
0004.00 A S_PNUM 12A O 7 13
0005.00 A S_PNAME 12A O 7 35
0006.00 A S_COUNT 2S 0O 7 58
0007.00 A R EMBED_CTL SFLCTL(EMBED_SFL)
0007.01 A OVERLAY
0008.00 A 42 SFLDSP
0009.00 A 41 SFLDSPCTL
0010.00 A 40 SFLCLR
0011.00 A 45 SFLEND(*MORE)
0012.00 A SFLSIZ(0011)
0013.00 A SFLPAG(0010)
0014.00 A FIRSTRRN 4S 0H SFLRCDNBR(CURSOR)
0015.00 A 1 28'PARTY ACCOUNT INFORMATION'
0016.00 A 1 73DATE
0017.00 A EDTCDE(Y)
0018.00 A 2 73TIME
0019.00 A 6 13'PARTY NUMBER'
0020.00 A DSPATR(HI)
0021.00 A 6 36'PARTY NAME'
0022.00 A DSPATR(HI)
0023.00 A 6 52'NO. OF ACCOUNTS'
0024.00 A DSPATR(HI)
0025.00 A R FOOTER
0026.00 A 24 3'F3 = EXIT'
****************** End of data
*********************************************************


PROGAM


*************** Beginning of data *************************************
HDEBUG(*YES)
HOPTION(*NODEBUGIO)
FEMBED_DSP CF E WORKSTN
F SFILE(EMBED_SFL:RRN)
F INFDS(infds)
*
Dinfds DS
DRECNO 378 379I 0
*
DARR S 10 DIM(9)
D PERRCD(3)
D CTDATA
*
DW_PNUM1 S 12A INZ(*BLANKS)
DW_PNUM2 S 12A INZ(*BLANKS)
C *IN03 DOWEQ *OFF
C 03 LEAVE
C EXSR DSPSFL
C ENDDO
C SETON LR
C*
C*_________________________________________________
C*_______________CLEAR SUBFILE_____________________
C*_________________________________________________
C CLRSFL BEGSR
C EVAL RRN=0
C SETON 40
C WRITE EMBED_CTL
C SETOFF 40
C ENDSR
C*_________________________________________________
C*_______________FIRST FUBROUTINE__________________
C*_________________________________________________
C*
C *INZSR BEGSR
C SETOFF 404142
C SETOFF 45
C Z-ADD *ZEROS RRN 4 0
C EVAL FIRSTRRN=1
C EXSR CLRSFL
C EXSR FILSFL
C EXSR DSPSFL
C ENDSR
C*_________________________________________________
C*_______________FILL SUBFILE__________________
C*_________________________________________________
C*
C FILSFL BEGSR
C
C EVAL RRN=0
*
C/EXEC SQL
C+ DECLARE C1 CURSOR FOR select count(*), PARTY from AMIT/ACCSUBPF
C+ group by PARTY order by PARTY
C/END-EXEC

C/EXEC SQL
C+ DECLARE C2 CURSOR FOR select PNAME, PNUM from AMIT/PARTYD
C+ order by PNUM
C/END-EXEC
*
*
C/EXEC SQL
C+ OPEN C1
C/END-EXEC
*
C/EXEC SQL
C+ OPEN C2
C/END-EXEC
*
C DOW SQLCOD=0
C/EXEC SQL
C+ FETCH FROM C1 INTO :S_COUNT, :W_PNUM1
C/END-EXEC
C/EXEC SQL
C+ FETCH FROM C2 INTO :S_PNAME, :W_PNUM2
C/END-EXEC
C IF SQLCOD<0
C LEAVE
C ENDIF
C IF SQLCOD=100
C SETON 45
C LEAVE
C ENDIF
C IF W_PNUM1<>W_PNUM2
C ITER
C ENDIF
C EVAL RRN=RRN+1
C IF RRN>9999
C LEAVE
C ENDIF
C EVAL S_PNUM=W_PNUM1
C WRITE EMBED_SFL
C ENDDO
*
C/EXEC SQL
C+ CLOSE C1
C/END-EXEC
*
C/EXEC SQL
C+ CLOSE C2
C/END-EXEC
C ENDSR
C*_________________________________________________
C*
C DSPSFL BEGSR
C SETON 4142
C IF RRN<=0
C SETOFF 42
C ENDIF
C WRITE FOOTER
C EXFMT EMBED_CTL
C EVAL FIRSTRRN=RECNO
C SETOFF 4142
C ENDSR
****************** End of data ****************************************


OUTPUT
PARTY ACCOUNT INFORMATION 2/14/13
03:54:22



PARTY NUMBER PARTY NAME NO. OF ACCOUNTS
P00000000001 UPI 07
P00000000002 SHRI 04
P00000000003 SHMANT 04
P00000000007 AFTAB 04


Bottom


F3 = EXIT




Embedded SQL Example Make dynamic query by making a placeholder
? in the query



Columns . . . : 6 80 Browse
AMIT/QRPGLESRC
SEU==>
EMBED_STM5
FMT H HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*************** Beginning of data
****************************************************
0001.00 HDEBUG(*YES)
130215
0002.00 HOPTION(*NODEBUGIO)
130215
0003.00 *
130215
0004.00 DFLD0001 S 10A INZ('IROBO')
130218
0005.00 DFLD0002 S 12A INZ('P00000000001')
130218
0006.00 DSQLSTMT1 S 350
130218
0007.00 *
130215
0008.00 C eval SQLSTMT1='UPDATE PARTYD SET PNAME=? ' +
130218
0009.00 C 'WHERE PNUM=?'
130218
0010.00 C/EXEC SQL
130215
0011.00 C+ PREPARE UPD_STMT FROM :SQLSTMT1
130218
0012.00 C/END-EXEC
130215
0013.00 *
130218
0014.00 C/EXEC SQL
130218
0015.00 C+ EXECUTE UPD_STMT USING :FLD0001,:FLD0002
130218
0016.00 C/END-EXEC
130218
0017.00 *
130218
0018.00 C SETON LR
130218
0019.00 C*_________________________________________________
130215
****************** End of data
*******************************************************
Embedded SQL Example Make dynamic query by making a Querystring,
PART-I



Physical file used in the program: PARTYD

PNAME PNUM PADDR OPNDD OPNMM OPNYY OPNSTS
000001 UPI P00000000001 CHENNAI 1 1 2,010 2
000002 SHRI P00000000002 EMPHAL 2 3 2,009 2
000003 SHMANT P00000000003 CHENNAI 3 5 2,011 2
000004 AFTAB P00000000007 HOMEIIEA 13 1 2,010 2
000005 AMI P00000000008 HELLY CORN 12 12 2,012 2
000006 JPY P00000000009 JEKINSAN 11 11 2,011 2
000007 SHANN P00000000010 KUPUNUS 24 1 2,012 2
000008 HAPART P00000000011 KOLINSA 16 1 2,010 2
****** ******** End of report ********





Physical file used in the program: ACCSUBPF

ORG CODE ACC NUMBER CURRENCY ACCOUNT MNG COUNTRY PARTY
190 A00000000001 EUR DFJASHN NKDAHFJ P00000000001
191 A00000000002 USD DAJFK DAJH P00000000001
192 A00000000003 TRY DAHB BJDKFA P00000000001
190 A00000000011 EUR NDJA CINE P00000000002
193 A00000000004 USD KIRAN NDKAL P00000000001
194 A00000000005 KWR DANK NKD P00000000001
190 A00000000001 USD MING CHINA P00000000003
191 A00000000002 TRY JHINGA CHINA P00000000003
190 A00000000021 USD DFKAF NKDA P00000000002
190 A00000000011 EUR NDJA CINE P00000000002
190 A00000000021 USD DFKAF NKDA P00000000002
190 A00000000001 USD MING CHINA P00000000003
191 A00000000002 TRY JHINGA CHINA P00000000003
190 A00000000001 EUR DFAKLSJN NDOAF P00000000007
191 A00000000002 USD KJDANFK NKDA P00000000007
190 A00000000001 EUR DFAKLSJN NDOAF P00000000007
191 A00000000002 USD KJDANFK NKDA P00000000007
195 A00000000006 TRY APPRINA SOUTN P00000000001
195 A00000000007 USD SONATNA SOUTN P00000000001


Display file used in the program: EMBED_DSP
Columns . . . : 1 80 Browse
AMIT/QRPGLESRC
SEU==>
EMBED_DSP
FMT DP .....AAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions+++++++++++++++++++++++++++
*************** Beginning of data
*********************************************************
0001.00 A DSPSIZ(24 80 *DS3)
130215
0002.00 A CA03(03 'EXIT')
130215
0003.00 A R EMBED_SFL SFL
130215
0004.00 A S_PNUM 12A O 7 13
130215
0005.00 A S_PNAME 12A O 7 35
130215
0006.00 A S_COUNT 2S 0O 7 58
130215
0007.00 A R EMBED_CTL SFLCTL(EMBED_SFL)
130215
0007.01 A OVERLAY
130215
0008.00 A 42 SFLDSP
130215
0009.00 A 41 SFLDSPCTL
130215
0010.00 A 40 SFLCLR
130215
0011.00 A 45 SFLEND(*MORE)
130215
0012.00 A SFLSIZ(0011)
130215
0013.00 A SFLPAG(0010)
130215
0014.00 A FIRSTRRN 4S 0H SFLRCDNBR(CURSOR)
130215
0015.00 A 1 28'PARTY ACCOUNT INFORMATION'
130215
0016.00 A 1 73DATE
130215
0017.00 A EDTCDE(Y)
130215
0018.00 A 2 73TIME
130215
0019.00 A 6 13'PARTY NUMBER'
130215
0020.00 A DSPATR(HI)
130215
0021.00 A 6 36'PARTY NAME'
130215
0022.00 A DSPATR(HI)
130215
0023.00 A 6 52'NO. OF ACCOUNTS'
130215
0024.00 A DSPATR(HI)
130215
0025.00 A R FOOTER
130215
0027.00 A 24 3'F3 = EXIT'
130215
****************** End of data
************************************************************



Columns . . . : 1 80 Edit
AMIT/QRPGLESRC
SEU==>
EMBED_STMT
FMT H
.....HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*************** Beginning of
data**************************************************
0001.00 HDEBUG(*YES)
0002.00 HOPTION(*NODEBUGIO)
0003.00 FEMBED_DSP CF E WORKSTN
0004.00 F SFILE(EMBED_SFL:RRN)
0005.00 F INFDS(infds)
0006.00 *
0007.00 Dinfds DS
0008.00 DRECNO 378 379I 0
0009.00 *
0010.00 DSQLSTMT1 S 350
0011.00 DSQLSTMT2 S 350
0012.00 DARR S 10 DIM(9)
0013.00 D PERRCD(3)
0014.00 D CTDATA
0015.00 *
0016.00 DW_PNUM1 S 12A INZ(*BLANKS)
0017.00 DW_PNUM2 S 12A INZ(*BLANKS)
0018.00 C *IN03 DOWEQ *OFF
0019.00 C 03 LEAVE
0020.00 C EXSR DSPSFL
0021.00 C ENDDO
0022.00 C SETON LR
0023.00 C*_________________________________________________
0024.00 C*_______________CLEAR SUBFILE_____________________
0025.00 C*_________________________________________________
0026.00 C CLRSFL BEGSR
0027.00 C EVAL RRN=0
0028.00 C SETON 40
0029.00 C WRITE EMBED_CTL
0030.00 C SETOFF 40
0031.00 C ENDSR
0032.00 C*_________________________________________________
0033.00 C*_______________FIRST FUBROUTINE__________________
0034.00 C*_________________________________________________
0035.00 C*
0036.00 C *INZSR BEGSR
0037.00 C SETOFF 404142
0038.00 C SETOFF 45
0039.00 C Z-ADD *ZEROS RRN 4 0
0040.00 C EVAL FIRSTRRN=1
0041.00 C EXSR CLRSFL
0042.00 C EXSR FILSFL
0043.00 C EXSR DSPSFL
0044.00 C ENDSR
0045.00 C*_________________________________________________
0046.00 C*_______________FILL SUBFILE__________________
0047.00 C*_________________________________________________
0048.00 C*
0049.00 C FILSFL BEGSR
0050.00 C EVAL SQLSTMT1= 'SELECT COUNT(*), ' +
0051.00 C ARR(7) + ' FROM ' +
0052.00 C ARR(1) + '/' + ARR(4) +
0053.00 C ' GROUP BY '+ ARR(7) +
0054.00 C ' ORDER BY ' + ARR(7)
0055.00 C EVAL SQLSTMT2= 'SELECT DISTINCT ' +
0056.00 C ARR(8) + ', ' + ARR(9) +
0057.00 C ' FROM ' +
0058.00 C ARR(1) + '/' + ARR(5) +
0059.00 C ' ORDER BY ' + ARR(9)
0060.00 C EVAL RRN=0
0061.00 *
0062.00 C/EXEC SQL
0063.00 C+ PREPARE stmt1 FROM :SQLSTMT1
0064.00 C/END-EXEC
0065.00
0066.00 C/EXEC SQL
0067.00 C+ PREPARE stmt2 FROM :SQLSTMT2
0068.00 C/END-EXEC
0069.00 *
0070.00 ***
0071.00 C/EXEC SQL
0072.00 C+ DECLARE C1 CURSOR FOR stmt1
0073.00 C/END-EXEC
0074.00 C/EXEC SQL
0075.00 C+ DECLARE C2 CURSOR FOR stmt2
0076.00 C/END-EXEC
0077.00 *
0078.00 *
0079.00 C/EXEC SQL
0080.00 C+ OPEN C1
0081.00 C/END-EXEC
0082.00 *
0083.00 C/EXEC SQL
0084.00 C+ OPEN C2
0085.00 C/END-EXEC
0086.00 *
0087.00 C DOW SQLCOD=0
0088.00 C/EXEC SQL
0089.00 C+ FETCH FROM C1 INTO :S_COUNT, :W_PNUM1
0090.00 C/END-EXEC
0091.00 C/EXEC SQL
0092.00 C+ FETCH FROM C2 INTO :S_PNAME, :W_PNUM2
0093.00 C/END-EXEC
0094.00 C IF SQLCOD<0
0095.00 C LEAVE
0096.00 C ENDIF
0097.00 C IF SQLCOD=100
0098.00 C SETON 45
0099.00 C LEAVE
0100.00 C
0101.00 C ENDIF
0102.00 C IF W_PNUM1<>W_PNUM2
0103.00 C ITER
0104.00 C ENDIF
0105.00 C EVAL RRN=RRN+1
0106.00 C IF RRN>9999
0107.00 C LEAVE
0108.00 C ENDIF
0109.00 C EVAL S_PNUM=W_PNUM1
0110.00 C WRITE EMBED_SFL
0111.00 C ENDDO
0112.00 *
0113.00 C/EXEC SQL
0114.00 C+ CLOSE C1
0115.00 C/END-EXEC
0116.00 *
0117.00 C/EXEC SQL
0118.00 C+ CLOSE C2
0119.00 C/END-EXEC
0120.00 C ENDSR
0121.00 C*_________________________________________________
0122.00 C*
0123.00 C DSPSFL BEGSR
0124.00 C SETON 4142
0125.00 C IF RRN<=0
0126.00 C SETOFF 42
0127.00 C ENDIF
0128.00 C WRITE FOOTER
0129.00 C WRITE EMBED_CTL
0130.00 C READ EMBED_CTL
0131.00 C EVAL FIRSTRRN=RECNO
0132.00 C SETOFF 4142
0133.00 C ENDSR
0134.00 **CTDATA ARR
0135.00 AMIT
0136.00 ACCSUBPF PARTYD
0137.00 PARTY PNAME PNUM
****************** End of data
***************************************************


OUTPUT
In the program above the query-string generated will be:
select count(*), PARTY from AMIT/ACCSUBPF group by party order by party
select PNAME, PNUM FROM AMIT/PARTYD ORDER BY PNUM

PARTY ACCOUNT INFORMATION 2/21/13
00:48:00



PARTY NUMBER PARTY NAME NO. OF ACCOUNTS
P00000000001 IROBO 07
P00000000002 KEMON 04
P00000000003 SHMANT 04
P00000000007 AFTAB 04




Bottom


F3 = EXIT





***NOTE: While making the query string if something you want to put in single quotes then use
the example given below:

e.g
Querystring for the query statement: SELECT * FTOM PARTYD WHERE PNUM=P00000000001 AND
PNAME LIKE %A% will be:


C EVAL PNUM001=P00000000001
C EVAL PNAME001=A
C EVAL COND_1='PARTY = ' + ''''+PNUM001+''''
C EVAL COND_2='PNAME LIKE'+'''%' + %TRIM(PNAME001) + '%'''

C EVAL QUERYSTRING = 'SELECT * FTOM PARTYD WHERE' +
C COND_1 + ' AND ' + COND_1


Embedded SQL Example Make dynamic query by making a Querystring,
PART-II


Physical file used in the program: PARTYD

PNAME PNUM PADDR OPNDD OPNMM OPNYY OPNSTS
000001 UPI P00001 CHENNAI 1 1 2,010 2
000002 SHRI P00002 EMPHAL 2 3 2,009 2
000003 SHMANT P00003 CHENNAI 3 5 2,011 2
000004 AFTAB P00007 HOMEIIEA 13 1 2,010 2
000005 AMI P00008 HELLY CORN 12 12 2,012 2
000006 JPY P00009 JEKINSAN 11 11 2,011 2
000007 SHANN P00010 KUPUNUS 24 1 2,012 2
000008 HAPART P00011 KOLINSA 16 1 2,010 2
****** ******** End of report ********





Physical file used in the program: ACCSUBPF

ORG CODE ACC NUMBER CURRENCY ACCOUNT MNG COUNTRY PARTY
190 A00001 EUR DFJASHN NKDAHFJ P00001
191 A00002 USD DAJFK DAJH P00001
192 A00003 TRY DAHB BJDKFA P00001
190 A00011 EUR NDJA CINE P00002
193 A00004 USD KIRAN NDKAL P00001
194 A00005 KWR DANK NKD P00001
190 A00001 USD MING CHINA P00003
191 A00002 TRY JHINGA CHINA P00003
190 A00021 USD DFKAF NKDA P00002
190 A00011 EUR NDJA CINE P00002
190 A00021 USD DFKAF NKDA P00002
190 A00001 USD MING CHINA P00003
191 A00002 TRY JHINGA CHINA P00003
190 A00001 EUR DFAKLSJN NDOAF P00007
191 A00002 USD KJDANFK NKDA P00007
190 A00001 EUR DFAKLSJN NDOAF P00007
191 A00002 USD KJDANFK NKDA P00007
195 A00006 TRY APPRINA SOUTN P00001
195 A00007 USD SONATNA SOUTN P00001



Physical file used in the program: RESULT1


Columns . . . : 1 80 Browse
AMIT/QRPGLESRC
SEU==>
RESULT1
FMT PF .....A..........T.Name++++++RLen++TDpB......Functions+++++++++++++++++++++++++++
*************** Beginning of data
**********************************************************
0001.00 A R RES0001
130215
0002.00 A PARTY_NO 12A
130215
0003.00 A COUNT 2P 0
130215
0004.00 A K PARTY_NO
130215
****************** End of data
************************************************************




Physical file used in the program: RESULT2

Columns . . . : 1 80 Browse
AMIT/QRPGLESRC
SEU==>
RESULT2
FMT PF .....A..........T.Name++++++RLen++TDpB......Functions+++++++++++++++++++++++++++
*************** Beginning of data
*****************************************************************
0001.00 A R RES0002
130215
0002.00 A PARTY_NAME 12A
130215
0003.00 A PARTY_NUM 12A
130215
0004.00 A K PARTY_NUM
130215
****************** End of data
********************************************************************



Logical file used in the program: RESULTL


Columns . . . : 1 80 Edit
AMIT/QRPGLESRC
SEU==>
RESULTL
FMT LF .....A..........T.Name++++++.Len++TDpB......Functions+++++++++++++++++++++++++++
*************** Beginning of data
*****************************************************************
0001.00 A R RES JFILE(RESULT1 RESULT2)
130215
0002.00 A J JOIN(RESULT1 RESULT2)
130215
0003.00 A JFLD(PARTY_NO PARTY_NUM)
130215
0004.00 A PARTY_NO JREF(1)
130215
0005.00 A COUNT JREF(1)
130215
0006.00 A PARTY_NAME JREF(2)
130215
0007.00 A K PARTY_NO
130215
****************** End of data
********************************************************************




Display file used in the program: EMBED_DSP

Columns . . . : 1 80 Browse
AMIT/QRPGLESRC
SEU==>
EMBED_DSP
FMT DP .....AAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions+++++++++++++++++++++++++++
*************** Beginning of data
*********************************************************
0001.00 A DSPSIZ(24 80 *DS3)
130215
0002.00 A CA03(03 'EXIT')
130215
0003.00 A R EMBED_SFL SFL
130215
0004.00 A S_PNUM 12A O 7 13
130215
0005.00 A S_PNAME 12A O 7 35
130215
0006.00 A S_COUNT 2S 0O 7 58
130215
0007.00 A R EMBED_CTL SFLCTL(EMBED_SFL)
130215
0007.01 A OVERLAY
130215
0008.00 A 42 SFLDSP
130215
0009.00 A 41 SFLDSPCTL
130215
0010.00 A 40 SFLCLR
130215
0011.00 A 45 SFLEND(*MORE)
130215
0012.00 A SFLSIZ(0011)
130215
0013.00 A SFLPAG(0010)
130215
0014.00 A FIRSTRRN 4S 0H SFLRCDNBR(CURSOR)
130215
0015.00 A 1 28'PARTY ACCOUNT INFORMATION'
130215
0016.00 A 1 73DATE
130215
0017.00 A EDTCDE(Y)
130215
0018.00 A 2 73TIME
130215
0019.00 A 6 13'PARTY NUMBER'
130215
0020.00 A DSPATR(HI)
130215
0021.00 A 6 36'PARTY NAME'
130215
0022.00 A DSPATR(HI)
130215
0023.00 A 6 52'NO. OF ACCOUNTS'
130215
0024.00 A DSPATR(HI)
130215
0025.00 A R FOOTER
130215
0027.00 A 24 3'F3 = EXIT'
130215
****************** End of data
************************************************************





PROGRAM

Columns . . . : 1 80 Edit
AMIT/QRPGLESRC
SEU==>
EMBED_STM2
FMT H
.....HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*************** Beginning of data
*********************************************************
0001.00 HDEBUG(*YES)
0002.00 HOPTION(*NODEBUGIO)
0003.00 FRESULTL IF E K DISK
0004.00 FEMBED_DSP CF E WORKSTN
0005.00 F SFILE(EMBED_SFL:RRN)
0006.00 F INFDS(infds)
0007.00 *
0008.00 Dinfds DS
0009.00 DRECNO 378 379I 0
0010.00 *
0011.00 DSQLSTMT1 S 350
0012.00 DSQLSTMT2 S 350
0013.00 DARR S 10 DIM(9)
0014.00 D PERRCD(3)
0015.00 D CTDATA
0016.00 *
0017.00 DW_PNUM1 S 12A INZ(*BLANKS)
0018.00 DW_PNUM2 S 12A INZ(*BLANKS)
0019.00 C *IN03 DOWEQ *OFF
0020.00 C 03 LEAVE
0021.00 C EXSR DSPSFL
0022.00 C ENDDO
0023.00 C SETON LR
0024.00 C*
0025.00 C*_________________________________________________
0026.00 C*_______________CLEAR SUBFILE_____________________
0027.00 C*_________________________________________________
0028.00 C CLRSFL BEGSR
0029.00 C EVAL RRN=0
0030.00 C SETON 40
0031.00 C WRITE EMBED_CTL
0032.00 C SETOFF 40
0033.00 C ENDSR
0034.00 C*_________________________________________________
0035.00 C*_______________FIRST FUBROUTINE__________________
0036.00 C*_________________________________________________
0037.00 C*
0038.00 C *INZSR BEGSR
0039.00 C SETOFF 404142
0040.00 C SETOFF 45
0041.00 C Z-ADD *ZEROS RRN 4 0
0042.00 C EVAL FIRSTRRN=1
0043.00 C EXSR CLRSFL
0044.00 C EXSR FILSFL
0045.00 C EXSR DSPSFL
0046.00 C ENDSR
0047.00 C*_________________________________________________
0048.00 C*_______________FILL SUBFILE__________________
0049.00 C*_________________________________________________
0050.00 C*
0051.00 C FILSFL BEGSR
0052.00 C EVAL SQLSTMT1= 'INSERT INTO RESULT1('+
0053.00 C 'SELECT COUNT(*), ' +
0054.00 C ARR(7) + ' FROM ' +
0055.00 C ARR(1) + '/' + ARR(4) +
0056.00 C ' GROUP BY '+ ARR(7) +
0057.00 C ')'
0058.00 C EVAL SQLSTMT2= 'INSERT INTO RESULT2('+
0059.00 C 'SELECT DISTINCT ' +
0060.00 C ARR(8) + ', ' + ARR(9) +
0061.00 C ' FROM ' +
0062.00 C ARR(1) + '/' + ARR(5) +
0063.00 C ')'
0064.00 C EVAL RRN=0
0065.00 *
0066.00 C/EXEC SQL
0067.00 C+ SET OPTION COMMIT=*NONE
0068.00 C/END-EXEC
0069.00 *
0070.00 C/EXEC SQL
0071.00 C+ EXECUTE IMMEDIATE :SQLSTMT1
0072.00 C/END-EXEC
0073.00 C/EXEC SQL
0074.00 C+ EXECUTE IMMEDIATE :SQLSTMT2
0075.00 C/END-EXEC
0076.00 *
0077.00 C IF SQLCOD<0
0078.00 C SETON LR
0079.00 C RETURN
0080.00 C ENDIF
0081.00 C IF SQLCOD=100
0082.00 C SETON 45
0083.00 C ENDIF
0084.00 *
0085.00 C IF SQLCOD=0
0086.00 C *LOVAL SETLL RES
0087.00 C READ(N) RES
0088.00 C DOW NOT %EOF(RESULTL)
0089.00 C EVAL RRN=RRN+1
0090.00 C IF RRN>9999
0091.00 C LEAVE
0092.00 C ENDIF
0093.00 C EVAL S_PNUM=PARTY_NO
0094.00 C EVAL S_PNAME=PARTY_NAME
0095.00 C EVAL S_COUNT=COUNT
0096.00 C WRITE EMBED_SFL
0097.00 C READ RES
0098.00 C ENDDO
0099.00 *
0100.00 C IF %EOF(RESULTL)
0101.00 C SETON 45
0102.00 C ENDIF
0103.00 *
0104.00 C ENDIF
0105.00 *
0106.00 C/EXEC SQL
0107.00 C+ DELETE FROM AMIT/RESULT1
0108.00 C/END-EXEC
0109.00 *
0110.00 C/EXEC SQL
0111.00 C+ DELETE FROM AMIT/RESULT2
0112.00 C/END-EXEC
0113.00 C ENDSR
0114.00 C*_________________________________________________
0115.00 C*
0116.00 C DSPSFL BEGSR
0117.00 C SETON 4142
0118.00 C IF RRN<0
0119.00 C SETOFF 42
0120.00 C ENDIF
0121.00 C WRITE FOOTER
0122.00 C EXFMT EMBED_CTL
0123.00 C EVAL FIRSTRRN=RECNO
0124.00 C SETOFF 4142
0125.00 C ENDSR
0126.00 **CTDATA ARR
0127.00 AMIT
0128.00 ACCSUBPF PARTYD
0129.00 PARTY PNAME PNUM
****************** End of data
***********************************************************









OUTPUT



PARTY ACCOUNT INFORMATION 2/21/13
00:58:14



PARTY NUMBER PARTY NAME NO. OF ACCOUNTS
P00001 IROBO 07
P00002 KEMON 04
P00003 SHMANT 04
P00007 AFTAB 04






Bottom


F3 = EXIT



Embedded SQL Example Scroll cursor to fetch records from TOP to
BOTTOM



Physical file used in the program: PARTYD


PNAME PNUM PADDR OPNDD OPNMM OPNYY OPNSTS
IROBO P00000000001 CHENNAI 1 1 2,010 2
IROBO P00000000002 EMPHAL 2 10 2,012 2
SHMANT P00000000003 CHENNAI 3 5 2,011 2
AFTAB P00000000007 HOMEIIEA 13 1 2,010 2
AMI P00000000008 HELLY CORN 12 12 2,012 2
JPY P00000000009 JEKINSAN 11 11 2,011 2
SHANN P00000000010 KUPUNUS 24 1 2,012 2
HAPART P00000000011 KOLINSA 16 1 2,010 2
******** End of data ********



Display file used in the program: EMBED_DSP2
Columns . . . : 1 80 Browse
AMIT/QRPGLESRC
SEU==>
EMBED_DSP2
FMT DP
.....AAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions+++++++++++++++++++++++++++
*************** Beginning of data
*********************************************************
0001.00 A DSPSIZ(24 80 *DS3)
0002.00 A CA03(03 'EXIT')
0003.00 A R EMBED_SFL SFL
0004.00 A S_PNUM 12A O 7 13
0005.00 A S_PNAME 12A O 7 35
0006.00 A S_PADDR 10A O 7 53
0007.00 A R EMBED_CTL SFLCTL(EMBED_SFL)
0008.00 A OVERLAY
0009.00 A 42 SFLDSP
0010.00 A 41 SFLDSPCTL
0011.00 A 40 SFLCLR
0012.00 A 45 SFLEND(*MORE)
0013.00 A SFLSIZ(0011)
0014.00 A SFLPAG(0010)
0015.00 A FIRSTRRN 4S 0H SFLRCDNBR(CURSOR)
0016.00 A 1 28'PARTY BASIC INFORMATION'
0017.00 A 1 73DATE
0018.00 A EDTCDE(Y)
0019.00 A 2 73TIME
0020.00 A 6 13'PARTY NUMBER'
0021.00 A DSPATR(HI)
0022.00 A 6 36'PARTY NAME'
0023.00 A DSPATR(HI)
0024.00 A 6 52'PARTY ADDRESS'
0025.00 A DSPATR(HI)
0026.00 A R FOOTER
0027.00 A 24 3'F3 = EXIT'
****************** End of data
***********************************************************





PROGRAM


*************** Beginning of data **********************************************
HDEBUG(*YES)
HOPTION(*NODEBUGIO)
FEMBED_DSP2CF E WORKSTN
F SFILE(EMBED_SFL:RRN)
F INFDS(infds)
*
Dinfds DS
DRECNO 378 379I 0
*
C *IN03 DOWEQ *OFF
C 03 LEAVE
C EXSR DSPSFL
C ENDDO
C SETON LR
C*
C*_________________________________________________
C*_______________CLEAR SUBFILE_____________________
C*_________________________________________________
C CLRSFL BEGSR
C EVAL RRN=0
C SETON 40
C WRITE EMBED_CTL
C SETOFF 40
C ENDSR
C*_________________________________________________
C*_______________FIRST FUBROUTINE__________________
C*_________________________________________________
C*
C *INZSR BEGSR
C SETOFF 404142
C SETOFF 45
C Z-ADD *ZEROS RRN 4 0
C EVAL FIRSTRRN=1
C EXSR CLRSFL
C EXSR FILSFL
C EXSR DSPSFL
C ENDSR
C*_________________________________________________
C*_______________FILL SUBFILE__________________
C*_________________________________________________
C*
C FILSFL BEGSR
C
C EVAL RRN=0
*
C/EXEC SQL
C+ DECLARE C1 SCROLL CURSOR FOR
C+ select PNAME, PNUM,PADDR from AMIT/PARTYD
C+ order by PNUM
C/END-EXEC
*
*
C/EXEC SQL
C+ OPEN C1
C/END-EXEC
*
C/EXEC SQL
C+ FETCH FIRST FROM C1 INTO :S_PNUM, :S_PNAME,:S_PADDR
C/END-EXEC
*
C DOW SQLCOD=0
C EVAL RRN=RRN+1
C IF RRN>9999
C LEAVE
C ENDIF
C WRITE EMBED_SFL
C/EXEC SQL
C+ FETCH NEXT FROM C1 INTO :S_PNUM, :S_PNAME,:S_PADDR
C/END-EXEC
C IF SQLCOD<0
C LEAVE
C ENDIF
C IF SQLCOD=100
C SETON 45
C LEAVE
C ENDIF
C ENDDO
*
*
C/EXEC SQL
C+ CLOSE C1
C/END-EXEC
*
C ENDSR
C*_________________________________________________
C*
C DSPSFL BEGSR
*
C SETON 4142
*
C IF RRN<=0
C SETOFF 42
C ENDIF
*
C WRITE FOOTER
C EXFMT EMBED_CTL
C EVAL FIRSTRRN=RECNO
C SETOFF 4142
C ENDSR
****************** End of data *************************************************




OUTPUT

PARTY BASIC INFORMATION 2/21/13
07:36:21



PARTY NUMBER PARTY NAME PARTY ADDRESS
IROBO P00000000001 CHENNAI
IROBO P00000000002 EMPHAL
SHMANT P00000000003 CHENNAI
AFTAB P00000000007 HOMEIIEA
AMI P00000000008 HELLY CORN
JPY P00000000009 JEKINSAN
SHANN P00000000010 KUPUNUS
HAPART P00000000011 KOLINSA


Bottom



F3 = EXIT



Embedded SQL Example Scroll cursor to fetch records from BOTTOM to
TOP 2
nd
method



Physical file used in the program: PARTYD


PNAME PNUM PADDR OPNDD OPNMM OPNYY OPNSTS
IROBO P00000000001 CHENNAI 1 1 2,010 2
IROBO P00000000002 EMPHAL 2 10 2,012 2
SHMANT P00000000003 CHENNAI 3 5 2,011 2
AFTAB P00000000007 HOMEIIEA 13 1 2,010 2
AMI P00000000008 HELLY CORN 12 12 2,012 2
JPY P00000000009 JEKINSAN 11 11 2,011 2
SHANN P00000000010 KUPUNUS 24 1 2,012 2
HAPART P00000000011 KOLINSA 16 1 2,010 2
******** End of data ********



Display file used in the program: EMBED_DSP2
Columns . . . : 1 80 Browse
AMIT/QRPGLESRC
SEU==>
EMBED_DSP2
FMT DP
.....AAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions+++++++++++++++++++++++++++
*************** Beginning of data
*********************************************************
0001.00 A DSPSIZ(24 80 *DS3)
0002.00 A CA03(03 'EXIT')
0003.00 A R EMBED_SFL SFL
0004.00 A S_PNUM 12A O 7 13
0005.00 A S_PNAME 12A O 7 35
0006.00 A S_PADDR 10A O 7 53
0007.00 A R EMBED_CTL SFLCTL(EMBED_SFL)
0008.00 A OVERLAY
0009.00 A 42 SFLDSP
0010.00 A 41 SFLDSPCTL
0011.00 A 40 SFLCLR
0012.00 A 45 SFLEND(*MORE)
0013.00 A SFLSIZ(0011)
0014.00 A SFLPAG(0010)
0015.00 A FIRSTRRN 4S 0H SFLRCDNBR(CURSOR)
0016.00 A 1 28'PARTY BASIC INFORMATION'
0017.00 A 1 73DATE
0018.00 A EDTCDE(Y)
0019.00 A 2 73TIME
0020.00 A 6 13'PARTY NUMBER'
0021.00 A DSPATR(HI)
0022.00 A 6 36'PARTY NAME'
0023.00 A DSPATR(HI)
0024.00 A 6 52'PARTY ADDRESS'
0025.00 A DSPATR(HI)
0026.00 A R FOOTER
0027.00 A 24 3'F3 = EXIT'
****************** End of data
***********************************************************





PROGRAM


*************** Beginning of data
**********************************************
HDEBUG(*YES)
HOPTION(*NODEBUGIO)
FEMBED_DSP2CF E WORKSTN
F SFILE(EMBED_SFL:RRN)
F INFDS(infds)
*
Dinfds DS
DRECNO 378 379I 0
*
C *IN03 DOWEQ *OFF
C 03 LEAVE
C EXSR DSPSFL
C ENDDO
C SETON LR
C*
C*_________________________________________________
C*_______________CLEAR SUBFILE_____________________
C*_________________________________________________
C CLRSFL BEGSR
C EVAL RRN=0
C SETON 40
C WRITE EMBED_CTL
C SETOFF 40
C ENDSR
C*_________________________________________________
C*_______________FIRST FUBROUTINE__________________
C*_________________________________________________
C*
C *INZSR BEGSR
C SETOFF 404142
C SETOFF 45
C Z-ADD *ZEROS RRN 4 0
C EVAL FIRSTRRN=1
C EXSR CLRSFL
C EXSR FILSFL
C EXSR DSPSFL
C ENDSR
C*_________________________________________________
C*_______________FILL SUBFILE__________________
C*_________________________________________________
C*
C FILSFL BEGSR
C
C EVAL RRN=0
*
C/EXEC SQL
C+ DECLARE C1 SCROLL CURSOR FOR
C+ select PNAME, PNUM,PADDR from AMIT/PARTYD
C+ order by PNUM
C/END-EXEC
*
*
C/EXEC SQL
C+ OPEN C1
C/END-EXEC
*
C/EXEC SQL
C+ FETCH LAST FROM C1 INTO :S_PNUM, :S_PNAME,:S_PADDR
C/END-EXEC
*
C DOW SQLCOD=0
C EVAL RRN=RRN+1
C IF RRN>9999
C LEAVE
C ENDIF
C WRITE EMBED_SFL
C/EXEC SQL
C+ FETCH PRIOR FROM C1 INTO :S_PNUM, :S_PNAME,:S_PADDR
C/END-EXEC
C IF SQLCOD<0
C LEAVE
C ENDIF
C IF SQLCOD=100
C SETON 45
C LEAVE
C ENDIF
C ENDDO
*
*
C/EXEC SQL
C+ CLOSE C1
C/END-EXEC
*
C ENDSR
C*_________________________________________________
C*
C DSPSFL BEGSR
*
C SETON 4142
*
C IF RRN<=0
C SETOFF 42
C ENDIF
*
C WRITE FOOTER
C EXFMT EMBED_CTL
C EVAL FIRSTRRN=RECNO
C SETOFF 4142
C ENDSR
****************** End of data
*************************************************






OUTPUT

PARTY BASIC INFORMATION
2/21/13

07:48:49



PARTY NUMBER PARTY NAME PARTY ADDRESS
HAPART P00000000011 KOLINSA
SHANN P00000000010 KUPUNUS
JPY P00000000009 JEKINSAN
AMI P00000000008 HELLY CORN
AFTAB P00000000007 HOMEIIEA
SHMANT P00000000003 CHENNAI
IROBO P00000000002 EMPHAL
IROBO P00000000001 CHENNAI



Bottom


F3 = EXIT


Embedded SQL Example SCROLL CURSOR USING RELATIVE


Physical file used in the program: PARTYD


PNAME PNUM PADDR OPNDD OPNMM OPNYY OPNSTS
IROBO P00000000001 CHENNAI 1 1 2,010 2
IROBO P00000000002 EMPHAL 2 10 2,012 2
SHMANT P00000000003 CHENNAI 3 5 2,011 2
AFTAB P00000000007 HOMEIIEA 13 1 2,010 2
AMI P00000000008 HELLY CORN 12 12 2,012 2
JPY P00000000009 JEKINSAN 11 11 2,011 2
SHANN P00000000010 KUPUNUS 24 1 2,012 2
HAPART P00000000011 KOLINSA 16 1 2,010 2
******** End of data ********



Display file used in the program: EMBED_DSP2
Columns . . . : 1 80 Browse
AMIT/QRPGLESRC
SEU==>
EMBED_DSP2
FMT DP
.....AAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions+++++++++++++++++++++++++++
*************** Beginning of data
*********************************************************
0001.00 A DSPSIZ(24 80 *DS3)
0002.00 A CA03(03 'EXIT')
0003.00 A R EMBED_SFL SFL
0004.00 A S_PNUM 12A O 7 13
0005.00 A S_PNAME 12A O 7 35
0006.00 A S_PADDR 10A O 7 53
0007.00 A R EMBED_CTL SFLCTL(EMBED_SFL)
0008.00 A OVERLAY
0009.00 A 42 SFLDSP
0010.00 A 41 SFLDSPCTL
0011.00 A 40 SFLCLR
0012.00 A 45 SFLEND(*MORE)
0013.00 A SFLSIZ(0011)
0014.00 A SFLPAG(0010)
0015.00 A FIRSTRRN 4S 0H SFLRCDNBR(CURSOR)
0016.00 A 1 28'PARTY BASIC INFORMATION'
0017.00 A 1 73DATE
0018.00 A EDTCDE(Y)
0019.00 A 2 73TIME
0020.00 A 6 13'PARTY NUMBER'
0021.00 A DSPATR(HI)
0022.00 A 6 36'PARTY NAME'
0023.00 A DSPATR(HI)
0024.00 A 6 52'PARTY ADDRESS'
0025.00 A DSPATR(HI)
0026.00 A R FOOTER
0027.00 A 24 3'F3 = EXIT'
****************** End of data
***********************************************************





PROGRAM


*************** Beginning of data
**********************************************
HDEBUG(*YES)
HOPTION(*NODEBUGIO)
FEMBED_DSP2CF E WORKSTN
F SFILE(EMBED_SFL:RRN)
F INFDS(infds)
*
Dinfds DS
DRECNO 378 379I 0
*
C *IN03 DOWEQ *OFF
C 03 LEAVE
C EXSR DSPSFL
C ENDDO
C SETON LR
C*
C*_________________________________________________
C*_______________CLEAR SUBFILE_____________________
C*_________________________________________________
C CLRSFL BEGSR
C EVAL RRN=0
C SETON 40
C WRITE EMBED_CTL
C SETOFF 40
C ENDSR
C*_________________________________________________
C*_______________FIRST FUBROUTINE__________________
C*_________________________________________________
C*
C *INZSR BEGSR
C SETOFF 404142
C SETOFF 45
C Z-ADD *ZEROS RRN 4 0
C EVAL FIRSTRRN=1
C EXSR CLRSFL
C EXSR FILSFL
C EXSR DSPSFL
C ENDSR
C*_________________________________________________
C*_______________FILL SUBFILE__________________
C*_________________________________________________
C*
C FILSFL BEGSR
C
C EVAL RRN=0
*
C/EXEC SQL
C+ DECLARE C1 SCROLL CURSOR FOR
C+ select PNAME, PNUM,PADDR from AMIT/PARTYD
C+ order by PNUM
C/END-EXEC
*
*
C/EXEC SQL
C+ OPEN C1
C/END-EXEC
*
C/EXEC SQL
C+ FETCH FIRST FROM C1 INTO :S_PNUM, :S_PNAME,:S_PADDR
C/END-EXEC
*
C/EXEC SQL
C+ FETCH RELATIVE +5 FROM C1 INTO :S_PNUM, :S_PNAME,:S_PADDR
C/END-EXEC
*
C IF SQLCOD>=0
C EVAL RRN=RRN+1
C WRITE EMBED_SFL
C IF SQLCOD=100
C SETON 45
C ENDIF
C ENDIF
*
C IF SQLCOD<0
C GOTO CLOSE_C1
C ENDIF
*
C/EXEC SQL
C+ FETCH RELATIVE -5 from C1 INTO :S_PNUM, :S_PNAME,:S_PADDR
C/END-EXEC
*
C IF SQLCOD>=0
C EVAL RRN=RRN+1
C WRITE EMBED_SFL
C IF SQLCOD=100
C SETON 45
C ENDIF
C ENDIF
*
C CLOSE_C1 TAG
C SETON 45
*
C/EXEC SQL
C+ CLOSE C1
C/END-EXEC
*
C ENDSR
C*_________________________________________________
C*
C DSPSFL BEGSR
*
C SETON 4142
*
C IF RRN<=0
C SETOFF 42
C ENDIF
*
C WRITE FOOTER
C EXFMT EMBED_CTL
C EVAL FIRSTRRN=RECNO
C SETOFF 4142
C ENDSR
****************** End of data
*************************************************





OUTPUT



PARTY BASIC INFORMATION
2/21/13

07:53:53



PARTY NUMBER PARTY NAME PARTY ADDRESS
JPY P00000000009 JEKINSAN
IROBO P00000000001 CHENNAI






Bottom



F3 = EXIT


Embedded SQL: Error handling technique
There is always possibility of the program getting crashed if the error related to
that if there is any unhandled error in the program.
There are some errors that we should always check in our embedded SQLRPGLE
program.
e.g.
Error while opening/closing the cursor. e.g. The cursor you are trying to open
is already open.
Error while fetching the record. E.g. Cant fetch the record from a closed
cursor, record not found condition.
Error in SQL statement.

There is mainly 2 technique of handling SQL errors.

I. EMBEDDED SQL ERROR HANDLING USING SQLCOD/SQLSTT

Every time the new statement comes the SQLCODE/SQLSTT is reset to default and after
the execution the new value is updated in this SQLCOD/SQLSTT.

Below is the value structure for both:

Condition SQLCODE SQLSTATE Class

(1st 2 positions)
Successful 0 '00'
Warning >0 '01'
End of Data 100 '02'
Row not found

Error <0 >='03'


Example
C/EXEC SQL
C+ DECLARE C1 SCROLL CURSOR FOR
C+ select PNAME, PNUM,PADDR from AMIT/PARTYD
C+ order by PNUM
C/END-EXEC
*
*
C/EXEC SQL
C+ OPEN C1
C/END-EXEC
*
C/EXEC SQL
C+ FETCH LAST FROM C1 INTO :S_PNUM, :S_PNAME,:S_PADDR
C/END-EXEC
*
C DOW SQLCOD=0
C EVAL RRN=RRN+1
C IF RRN>9999
C LEAVE
C ENDIF
C WRITE EMBED_SFL
C/EXEC SQL
C+ FETCH PRIOR FROM C1 INTO :S_PNUM, :S_PNAME,:S_PADDR
C/END-EXEC
C IF SQLCOD<0
C LEAVE
C ENDIF
C IF SQLCOD=100
C SETON 45
C LEAVE
C ENDIF
C ENDDO
*
*
C/EXEC SQL
C+ CLOSE C1
C/END-EXEC







II. EMBEDDED SQL ERROR HANDLING USING WHENEVER

This is another way of monitoring of SQL errors.
Syntax:
WHENEVER Error-condition Action

Below are the error-condition used in the syntax:
NOT FOUNDCondition to check if there is no row found by the cursor fetch operation.
This is equivalent to SQLCOD=100 and SQLSTT=02000.
SQLWARNINGCondition to check if there has been successful execution of the
statement but still there are some warning.
SQLERRORCondition to check if any error has been found.
Action is the response to the error condition to handle it. Possible values are shown below:
CONTINUE--Continue the execution from the next statement.
GOTO Label--Go to the defined Label in the program.


Example
Physical file used in the program: PARTYD


PNAME PNUM PADDR OPNDD OPNMM OPNYY OPNSTS
IROBO P00000000001 CHENNAI 1 1 2,010 2
IROBO P00000000002 EMPHAL 2 10 2,012 2
SHMANT P00000000003 CHENNAI 3 5 2,011 2
AFTAB P00000000007 HOMEIIEA 13 1 2,010 2
AMI P00000000008 HELLY CORN 12 12 2,012 2
JPY P00000000009 JEKINSAN 11 11 2,011 2
SHANN P00000000010 KUPUNUS 24 1 2,012 2
HAPART P00000000011 KOLINSA 16 1 2,010 2
******** End of data ********



*************** Beginning of data **********************************************
HDEBUG(*YES)
HOPTION(*NODEBUGIO)
*
DFLD0001 S 10A INZ('IROBO')
DFLD0002 S 12A INZ('P00000000022')
DSQLSTMT1 S 350
*
C eval SQLSTMT1='UPDATE PARTYD SET PNAME=? ' +
C 'WHERE PNUM=?'
C/EXEC SQL
C+ WHENEVER SQLERROR GOTO @ERROR
C/END-EXEC
*
C/EXEC SQL
C+ WHENEVER NOT FOUND GOTO @NODATA
C/END-EXEC
*
C/EXEC SQL
C+ WHENEVER SQLWARNING CONTINUE
C/END-EXEC
*
C/EXEC SQL
C+ PREPARE UPD_STMT FROM :SQLSTMT1
C/END-EXEC
*
C/EXEC SQL
C+ EXECUTE UPD_STMT USING :FLD0001,:FLD0002
C/END-EXEC
*
C 'UPDATED' DSPLY
C SETON LR
C RETURN
*
C @ERROR TAG
C SETON LR
C 'NO DATA' DSPLY
C RETURN
C*_________________________________________________
C @NODATA TAG
C 'NO DATA' DSPLY
C SETON LR
C*_________________________________________________
****************** End of data *************************************************




OUTPUT

NO DATA




Embedded SQL using cursor and SQLSTMT



1
st
Physical file used in the program = PARTYD


PNAME PNUM PADDR OPNDD OPNMM OPNYY OPNSTS
UPI P00000000001 CHENNAI 1 1 2,010 2
SHRI P00000000002 EMPHAL 2 3 2,009 2
SHMANT P00000000003 CHENNAI 3 5 2,011 2
AFTAB P00000000007 HOMEIIEA 13 1 2,010 2
AMI P00000000008 HELLY CORN 12 12 2,012 2
JPY P00000000009 JEKINSAN 11 11 2,011 2
SHANN P00000000010 KUPUNUS 24 1 2,012 2
HAPART P00000000011 KOLINSA 16 1 2,010 2






2
nd
Physical file used in the program = ACCSUBPF


ORG CODE ACC NUMBER CURRENCY ACCOUNT MNG COUNTRY PARTY
190 A00000000001 EUR DFJASHN NKDAHFJ P00000000001
191 A00000000002 USD DAJFK DAJH P00000000001
192 A00000000003 TRY DAHB BJDKFA P00000000001
190 A00000000011 EUR NDJA CINE P00000000002
193 A00000000004 USD KIRAN NDKAL P00000000001
194 A00000000005 KWR DANK NKD P00000000001
190 A00000000001 USD MING CHINA P00000000003
191 A00000000002 TRY JHINGA CHINA P00000000003
190 A00000000021 USD DFKAF NKDA P00000000002
190 A00000000011 EUR NDJA CINE P00000000002
190 A00000000021 USD DFKAF NKDA P00000000002
190 A00000000001 USD MING CHINA P00000000003
191 A00000000002 TRY JHINGA CHINA P00000000003
190 A00000000001 EUR DFAKLSJN NDOAF P00000000007
191 A00000000002 USD KJDANFK NKDA P00000000007
190 A00000000001 EUR DFAKLSJN NDOAF P00000000007
191 A00000000002 USD KJDANFK NKDA P00000000007
195 A00000000006 TRY APPRINA SOUTN P00000000001
195 A00000000007 USD SONATNA SOUTN P00000000001



Display file used in the program = EMBED_DSP
Columns . . . : 1 80 Browse
AMIT/QRPGLESRC
SEU==>
EMBED_DSP
FMT DP
.....AAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions+++++++++++++++++++++++++++
*************** Beginning of data
********************************************************
0001.00 A DSPSIZ(24 80 *DS3)
0002.00 A CA03(03 'EXIT')
0003.00 A R EMBED_SFL SFL
0004.00 A S_PNUM 12A O 7 13
0005.00 A S_PNAME 12A O 7 35
0006.00 A S_COUNT 2S 0O 7 58
0007.00 A R EMBED_CTL SFLCTL(EMBED_SFL)
0008.00 A 42 SFLDSP
0009.00 A 41 SFLDSPCTL
0010.00 A 40 SFLCLR
0011.00 A 45 SFLEND(*MORE)
0012.00 A SFLSIZ(0011)
0013.00 A SFLPAG(0010)
0014.00 A FIRSTRRN 4S 0H SFLRCDNBR(CURSOR)
0015.00 A 1 28'PARTY ACCOUNT INFORMATION'
0016.00 A 1 73DATE
0017.00 A EDTCDE(Y)
0018.00 A 2 73TIME
0019.00 A 6 13'PARTY NUMBER'
0020.00 A DSPATR(HI)
0021.00 A 6 36'PARTY NAME'
0022.00 A DSPATR(HI)
0023.00 A 6 52'NO. OF ACCOUNTS'
0024.00 A DSPATR(HI)
0025.00 A R FOOTER
0026.00 A OVERLAY
0027.00 A 24 3'F3 = EXIT'
****************** End of data
********************************************************




Columns . . . : 1 80 Edit
AMIT/QRPGLESRC
SEU==>
EMBED_STMT
FMT H
.....HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*************** Beginning of data
**************************************************
0001.00 HDEBUG(*YES)
0002.00 HOPTION(*NODEBUGIO)
0003.00 FPARTYD IF E K DISK
0004.00 FACCSUBPF IF E K DISK
0005.00 FEMBED_DSP CF E WORKSTN
0006.00 F SFILE(EMBED_SFL:RRN)
0007.00 F INFDS(infds)
0008.00 *
0009.00 Dinfds DS
0010.00 DRECNO 378 379I 0
0011.00 *
0012.00 DSQLSTMT1 S 350
0013.00 DSQLSTMT2 S 350
0014.00 DARR S 10 DIM(9)
0015.00 D PERRCD(3)
0016.00 D CTDATA
0017.00 *
0018.00 DW_PNUM1 S 12A INZ(*BLANKS)
0019.00 DW_PNUM2 S 12A INZ(*BLANKS)
0020.00 C *IN03 DOWEQ *OFF
0021.00 C 03 LEAVE
0022.00 C EXSR DSPSFL
0023.00 C ENDDO
0024.00 C SETON LR
0025.00 C*
0026.00 C*_________________________________________________
0027.00 C*_______________CLEAR SUBFILE_____________________
0028.00 C*_________________________________________________
0029.00 C CLRSFL BEGSR
0030.00 C EVAL RRN=0
0031.00 C SETON 40
0032.00 C WRITE EMBED_CTL
0033.00 C SETOFF 40
0034.00 C ENDSR
0035.00 C*_________________________________________________
0036.00 C*_______________FIRST FUBROUTINE__________________
0037.00 C*_________________________________________________
0038.00 C*
0039.00 C *INZSR BEGSR
0040.00 C SETOFF 404142
0041.00 C SETOFF 45
0042.00 C Z-ADD *ZEROS RRN 4 0
0043.00 C EVAL FIRSTRRN=1
0044.00 C EXSR CLRSFL
0045.00 C EXSR FILSFL
0046.00 C EXSR DSPSFL
0047.00 C ENDSR
0048.00 C*_________________________________________________
0049.00 C*_______________FILL SUBFILE__________________
0050.00 C*_________________________________________________
0051.00 C*
0052.00 C FILSFL BEGSR
0053.00 C EVAL SQLSTMT1= 'SELECT COUNT(*), ' +
0054.00 C ARR(7) + ' FROM ' +
0055.00 C ARR(1) + '/' + ARR(4) +
0056.00 C ' GROUP BY '+ ARR(7) +
0057.00 C ' ORDER BY ' + ARR(7)
0058.00 C EVAL SQLSTMT2= 'SELECT DISTINCT ' +
0059.00 C ARR(8) + ', ' + ARR(9) +
0060.00 C ' FROM ' +
0061.00 C ARR(1) + '/' + ARR(5) +
0062.00 C ' ORDER BY ' + ARR(9)
0063.00 C EVAL RRN=0
0064.00 *
0065.00 C/EXEC SQL
0066.00 C+ PREPARE stmt1 FROM :SQLSTMT1
0067.00 C/END-EXEC
0068.00
0069.00 C/EXEC SQL
0070.00 C+ PREPARE stmt2 FROM :SQLSTMT2
0071.00 C/END-EXEC
0072.00 *
0073.00 ***
0074.00 C/EXEC SQL
0075.00 C+ DECLARE C1 CURSOR FOR stmt1
0076.00 C/END-EXEC
0077.00 C/EXEC SQL
0078.00 C+ DECLARE C2 CURSOR FOR stmt2
0079.00 C/END-EXEC
0080.00 *
0081.00 *
0082.00 C/EXEC SQL
0083.00 C+ OPEN C1
0084.00 C/END-EXEC
0085.00 *
0086.00 C/EXEC SQL
0087.00 C+ OPEN C2
0088.00 C/END-EXEC
0089.00 *
0090.00 C DOW SQLCOD=0
0091.00 C/EXEC SQL
0092.00 C+ FETCH FROM C1 INTO :S_COUNT, :W_PNUM1
0093.00 C/END-EXEC
0094.00 C/EXEC SQL
0095.00 C+ FETCH FROM C2 INTO :S_PNAME, :W_PNUM2
0096.00 C/END-EXEC
0097.00 C IF SQLCOD<>0
0098.00 C IF SQLCOD=100
0099.00 C SETON 45
0100.00 C ENDIF
0101.00 C LEAVE
0102.00 C ENDIF
0103.00 C IF W_PNUM1<>W_PNUM2
0104.00 C ITER
0105.00 C ENDIF
0106.00 C EVAL RRN=RRN+1
0107.00 C EVAL S_PNUM=W_PNUM1
0108.00 C WRITE EMBED_SFL
0109.00 C ENDDO
0110.00 *
0111.00 C/EXEC SQL
0112.00 C+ CLOSE C1
0113.00 C/END-EXEC
0114.00 *
0115.00 C/EXEC SQL
0116.00 C+ CLOSE C2
0117.00 C/END-EXEC
0118.00 C ENDSR
0119.00 C*_________________________________________________
0120.00 C*
0121.00 C DSPSFL BEGSR
0122.00 C SETON 4142
0123.00 C WRITE EMBED_CTL
0124.00 C WRITE FOOTER
0125.00 C READ EMBED_CTL
0126.00 C EVAL FIRSTRRN=RECNO
0127.00 C SETOFF 4142
0128.00 C ENDSR
0129.00 **CTDATA ARR
0130.00 AMIT
0131.00 ACCSUBPF PARTYD
0132.00 PARTY PNAME PNUM
****************** End of data
**************************************************************************************
****



OUTPUT
PARTY ACCOUNT INFORMATION 2/14/13
03:54:22



PARTY NUMBER PARTY NAME NO. OF ACCOUNTS
P00000000001 UPI 07
P00000000002 SHRI 04
P00000000003 SHMANT 04
P00000000007 AFTAB 04






Bottom


F3 = EXIT




Embedded SQL using SQLSTMT without cursor



Physical file used in the program = RESULT1

Columns . . . : 1 80 Browse
AMIT/QRPGLESRC
SEU==>
RESULT1
FMT PF
.....A..........T.Name++++++RLen++TDpB......Functions+++++++++++++++++++++++++++
*************** Beginning of data
*********************************************************
0001.00 A R RES0001
0002.00 A PARTY_NO 12A
0003.00 A COUNT 2P 0
0004.00 A K PARTY_NO
****************** End of data
************************************************************



Physical file used in the program = RESULT2


Columns . . . : 1 80 Browse
AMIT/QRPGLESRC
SEU==>
RESULT2
FMT PF
.....A..........T.Name++++++RLen++TDpB......Functions+++++++++++++++++++++++++++
*************** Beginning of data
*********************************************************
0001.00 A R RES0002
0002.00 A PARTY_NAME 12A
0003.00 A PARTY_NUM 12A
0004.00 A K PARTY_NUM
****************** End of data
************************************************************




Logical file used in the program = RESULTL

Columns . . . : 1 80 Edit
AMIT/QRPGLESRC
SEU==>
RESULTL
FMT LF
.....A..........T.Name++++++.Len++TDpB......Functions+++++++++++++++++++++++++++
*************** Beginning of data
*********************************************************
0001.00 A R RES JFILE(RESULT1 RESULT2)
0002.00 A J JOIN(RESULT1 RESULT2)
0003.00 A JFLD(PARTY_NO PARTY_NUM)
0004.00 A PARTY_NO JREF(1)
0005.00 A COUNT JREF(1)
0006.00 A PARTY_NAME JREF(2)
0007.00 A K PARTY_NO
****************** End of data
************************************************************




Display file used in the program = EMBED_DSP


Columns . . . : 1 80 Browse
AMIT/QRPGLESRC
SEU==>
EMBED_DSP
FMT DP
.....AAN01N02N03T.Name++++++RLen++TDpBLinPosFunctions+++++++++++++++++++++++++++
*************** Beginning of data
*********************************************************
0001.00 A DSPSIZ(24 80 *DS3)
0002.00 A CA03(03 'EXIT')
0003.00 A R EMBED_SFL SFL
0004.00 A S_PNUM 12A O 7 13
0005.00 A S_PNAME 12A O 7 35
0006.00 A S_COUNT 2S 0O 7 58
0007.00 A R EMBED_CTL SFLCTL(EMBED_SFL)
0008.00 A 42 SFLDSP
0009.00 A 41 SFLDSPCTL
0010.00 A 40 SFLCLR
0011.00 A 45 SFLEND(*MORE)
0012.00 A SFLSIZ(0011)
0013.00 A SFLPAG(0010)
0014.00 A FIRSTRRN 4S 0H SFLRCDNBR(CURSOR)
0015.00 A 1 28'PARTY ACCOUNT INFORMATION'
0016.00 A 1 73DATE
0017.00 A EDTCDE(Y)
0018.00 A 2 73TIME
0019.00 A 6 13'PARTY NUMBER'
0020.00 A DSPATR(HI)
0021.00 A 6 36'PARTY NAME'
0022.00 A DSPATR(HI)
0023.00 A 6 52'NO. OF ACCOUNTS'
0024.00 A DSPATR(HI)
0025.00 A R FOOTER
0026.00 A OVERLAY
0027.00 A 24 3'F3 = EXIT'
****************** End of data
************************************************************





Program demonstrating Embedded SQL using SQLSTMT without cursor

Columns . . . : 1 80 Browse
AMIT/QRPGLESRC
SEU==>
EMBED_STM2
FMT H
.....HKeywords++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*************** Beginning of data
**********************************************************
0001.00 HDEBUG(*YES)
0002.00 HOPTION(*NODEBUGIO)
0003.00 FPARTYD IF E K DISK
0004.00 FACCSUBPF IF E K DISK
0005.00 FRESULTL IF E K DISK
0006.00 FEMBED_DSP CF E WORKSTN
0007.00 F SFILE(EMBED_SFL:RRN)
0008.00 F INFDS(infds)
0009.00 *
0010.00 Dinfds DS
0011.00 DRECNO 378 379I 0
0012.00 *
0013.00 DSQLSTMT1 S 350
0014.00 DSQLSTMT2 S 350
0015.00 DARR S 10 DIM(9)
0016.00 D PERRCD(3)
0017.00 D CTDATA
0018.00 *
0019.00 DW_PNUM1 S 12A INZ(*BLANKS)
0020.00 DW_PNUM2 S 12A INZ(*BLANKS)
0021.00 C *IN03 DOWEQ *OFF
0022.00 C 03 LEAVE
0023.00 C EXSR DSPSFL
0024.00 C ENDDO
0025.00 C SETON LR
0026.00 C*
0027.00 C*_________________________________________________
0028.00 C*_______________CLEAR SUBFILE_____________________
0029.00 C*_________________________________________________
0030.00 C CLRSFL BEGSR
0031.00 C EVAL RRN=0
0032.00 C SETON 40
0033.00 C WRITE EMBED_CTL
0034.00 C SETOFF 40
0035.00 C ENDSR
0036.00 C*_________________________________________________
0037.00 C*_______________FIRST FUBROUTINE__________________
0038.00 C*_________________________________________________
0039.00 C*
0040.00 C *INZSR BEGSR
0041.00 C SETOFF 404142
0042.00 C SETOFF 45
0043.00 C Z-ADD *ZEROS RRN 4 0
0044.00 C EVAL FIRSTRRN=1
0045.00 C EXSR CLRSFL
0046.00 C EXSR FILSFL
0047.00 C EXSR DSPSFL
0048.00 C ENDSR
0049.00 C*_________________________________________________
0050.00 C*_______________FILL SUBFILE__________________
0051.00 C*_________________________________________________
0052.00 C*
0053.00 C FILSFL BEGSR
0054.00 C EVAL SQLSTMT1= 'INSERT INTO RESULT1('+
0055.00 C 'SELECT COUNT(*), ' +
0056.00 C ARR(7) + ' FROM ' +
0057.00 C ARR(1) + '/' + ARR(4) +
0058.00 C ' GROUP BY '+ ARR(7) +
0059.00 C ')'
0060.00 C EVAL SQLSTMT2= 'INSERT INTO RESULT2('+
0061.00 C 'SELECT DISTINCT ' +
0062.00 C ARR(8) + ', ' + ARR(9) +
0063.00 C ' FROM ' +
0064.00 C ARR(1) + '/' + ARR(5) +
0065.00 C ')'
0066.00 C EVAL RRN=0
0067.00 *
0068.00 C/EXEC SQL
0069.00 C+ SET OPTION COMMIT=*NONE
0070.00 C/END-EXEC
0071.00 *
0072.00 C/EXEC SQL
0073.00 C+ EXECUTE IMMEDIATE :SQLSTMT1
0074.00 C/END-EXEC
0075.00 C/EXEC SQL
0076.00 C+ EXECUTE IMMEDIATE :SQLSTMT2
0077.00 C/END-EXEC
0078.00 *
0079.00 C IF SQLCOD<>0
0080.00 C IF SQLCOD=100
0081.00 C SETON 45
0082.00 C ENDIF
0083.00 C SETON LR
0084.00 C RETURN
0085.00 C ENDIF
0086.00 *
0087.00 C IF SQLCOD=0
0088.00 C *LOVAL SETLL RES
0089.00 C READ(N) RES
0090.00 C DOW NOT %EOF(RESULTL)
0091.00 C EVAL RRN=RRN+1
0092.00 C EVAL S_PNUM=PARTY_NO
0093.00 C EVAL S_PNAME=PARTY_NAME
0094.00 C EVAL S_COUNT=COUNT
0095.00 C WRITE EMBED_SFL
0096.00 C READ RES
0097.00 C ENDDO
0098.00 *
0099.00 C IF %EOF(RESULTL)
0100.00 C SETON 45
0101.00 C ENDIF
0102.00 *
0103.00 C ENDIF
0104.00 *
0105.00 C/EXEC SQL
0106.00 C+ DELETE FROM AMIT/RESULT1
0107.00 C/END-EXEC
0108.00 *
0109.00 C/EXEC SQL
0110.00 C+ DELETE FROM AMIT/RESULT2
0111.00 C/END-EXEC
0112.00 C ENDSR
0113.00 C*_________________________________________________
0114.00 C*
0115.00 C DSPSFL BEGSR
0116.00 C SETON 4142
0117.00 C WRITE EMBED_CTL
0118.00 C WRITE FOOTER
0119.00 C READ EMBED_CTL
0120.00 C EVAL FIRSTRRN=RECNO
0121.00 C SETOFF 4142
0122.00 C ENDSR
0123.00 **CTDATA ARR
0124.00 AMIT
0125.00 ACCSUBPF PARTYD
0126.00 PARTY PNAME PNUM
****************** End of data
***********************************************************









OUTPUT



PARTY ACCOUNT INFORMATION 2/14/13
05:42:09



PARTY NUMBER PARTY NAME NO. OF ACCOUNTS
P00000000001 UPI 07
P00000000002 SHRI 04
P00000000003 SHMANT 04
P00000000007 AFTAB 02






Bottom


F3 = EXIT

S-ar putea să vă placă și