Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
High-Level language
o READ/WRITE/UPDATE/CHAIN/UPDATE
o Embedded SQL in HLL programs
OPNQRYF
RPG
RPG
SQL
SQL
SOURCE
PGM
SOURCE
PREPROCESSOR
RPG
OBJECT
COMPILER
UPDATE
EMPMST
C+
SET EMPDEP = QQ
C+
C/END-EXEC
**Note
Only one SQL statement is allowed.
WHERE
Host Variables
RPG program variables are used within SQL statements are
known as Host Variables.
Example:
C/EXEC SQL
C+ SET OPTION COMMIT=*NONE
C/END-EXEC
C/EXEC SQL
C+UPDATE STUMST
C+SET STUDEP = :DEPT
C+WHERE STUCDE = :CODE
C/END-EXEC
Dynamic SQL:
Construct SQL statement on the fly.(i.e when program runs)
Two methods of dynamic SQL are
1) EXECUTE IMMEDIATE
2) PTREPARE and EXECUTE
**Note:- Prepare takes extra time building statement but
execution runs faster.
// Otherwise COMMIT is
IF
(SQLCODE
< 0);
// Part 1
//Part2
(SQLCODE = 100);
// NO RECORD FOUND
ELSE;
ENDIF;
PARAMETER MARKER
We can embed variable in Dynamic SQL statement using
parameter marker ?.
Example
DYNSQLSTMT=UPDATE STUDEP SET STUDEP = CIVIL WHERE
STUCDE=?;
EXEC SQL SET OPTION COMMIT=*NONE;
CODE = STUCDE // Might be coming from screen or incoming
parameter
EXEC SQL PREPARE UPDSTU FROM :DYNSQLSTMT;
IF (SQLCODE >= 0 );
EXEC SQL EXECUTE UPDSTU USING :CODE;
ENDIF;
SQL Error-handling
SQL run-time errors can be handled using SQLCDE and SQLSTT
fields.
These fields are sub fields are SQLCA data structure.
SQLCA is a special DS and it is automatically added by the
compiler when SQL code is compiled.
In RPGIV
SQLSTT
SQLSTATE In RPGIV
SQL CODE
0
>0
<0
Description
No error
Warning
Severe Error
SQL STATE
00000
NOT 00000
Description
No error
Error
CURSOR
FETCH Position:
FETCH NEXT [FROM] cursorname INTO
........
NEXT (DEFAULT)
PRIOR
FIRST
BEFORE
(Before first row)
AFTER
(After last row)
CURRENT
(No change in position)
RELATIVE N (if N is Negative previous and Positive next)
EMPRPT O E
PRINTER
OFLIND(*IN99)
D EMPDS E DS
EXTNAME(EMPMST)
/FREE
WRITE HEADER;
WRITE COLHDG;
EXEC SQL
DECLARE EMPCURSOR
EMPMST
FOR READ ONLY;
FROM
// Step 1
// Step 2
EMPSAL;
EXSR OVERFLOWSR;
// Handle overflow
WRITE DATA;
EXEC SQL FETCH NEXT FROM EMPCURSOR INTO :EMPDS;
ENDDO;
EXEC SQL CLOSE EMPUCURSOR; // Step 5
EXSR OVERFLOWSR;
// Handle overflow
WRITE TOTAL;
EXSR OVERFLOWSR;
// Handle overflow
WRITE FOOTER;
*INLR=*ON;
BEGSR
IF
OVERFLOWSR;
(*IN99 = *ON);
WRITE HEADER;
WRITE COLHDG;
*IN99 = *OFF;
ENDIF;
ENDSR;
/END-FREE