SQL/MX Programming Manual for C and COBOL (G06.24+, H06.03+)

Static Rowsets
HP NonStop SQL/MX Programming Manual for C and COBOL523627-004
7-26
Using the Index Identifier
...
EXEC SQL ROWSET FOR KEY BY row_id
SELECT empnum, row_id
INTO :hva_empnum,
:hva_row_id
FROM persnl.employee
WHERE jobcode = :hva_jobcode;
...
EXEC SQL GET DIAGNOSTICS :numrows = ROW_COUNT;
...
for (i = 0; i < numrows; i++) {
printf("\nEmp Nbr: %hu", hva_empnum[i]);
printf("\nRow Id: %hu", hva_row_id[i]);
}
...
...
EXEC SQL BEGIN DECLARE SECTION END-EXEC.
01 sqlstate pic x(5).
01 rs.
02 ROWSET[5] hvajobcode pic 9(4) comp.
02 ROWSET[100] hvaempnum pic 9(4) comp.
02 ROWSET[100] hvarowid pic s9(4) comp.
01 numrows pic 9(9) comp.
EXEC SQL END DECLARE SECTION END-EXEC.
01 i pic s9(4) comp.
...
***** Populate the rowset in some way *****
Move 100 TO hvajobcode(1)
Move 200 TO hvajobcode(2)
***3 Does not exist***
Move 350 TO hvajobcode(3)
Move 400 TO hvajobcode(4)
Move 500 TO hvajobcode(5)
EXEC SQL ROWSET FOR KEY BY row_id
SELECT empnum, row_id+1
INTO :hvaempnum,
:hvarowid
FROM employee
WHERE jobcode = :hvajobcode END-EXEC.
EXEC SQL GET DIAGNOSTICS :numrows = ROW_COUNT end-exec.
PERFORM VARYING i FROM 1 BY 1 UNTIL i < numrows
display "Emp Nbr: " hvaempnum(i)
display "Row Id: " hvarowid(i)
end-perform.
...
The output for this example has 20 rows selected from the EMPLOYEE table:
Eleven rows with jobcode equal to 100 and row identifier value 0 for C and 1 for
COBOL
One row with jobcode equal to 200 and row identifier value 1 for C and 2 for
COBOL
Five rows with jobcode equal to 400 and row identifier value 3 for C and 4 for
COBOL
COBOL