Beruflich Dokumente
Kultur Dokumente
Nagaraju Domala
Session 11 - Objectives
Nagaraju Domala
Concepts of Cursors
Multi-row
SELECT
TABLE
Retrieve
RESULT One row
TABLE at a time
Nagaraju Domala
DECLARE CURSOR
EXEC SQL
DECLARE CUREMP01 CURSOR FOR
SELECT EMPNO, SEX, AGE, NAME
FROM EMPLOYEE
WHERE JOIN_DATE > :WS-JOIN-DATE
END-EXEC.
Nagaraju Domala
OPEN
EXEC SQL
OPEN cursor-name
END-EXEC.
101 01-02-1996
105 15-02-1996
102 04-05-1996 EXEC SQL
OPEN CUR 101 01-02-1996
103 01-11-1995
END-EXEC.
104 15-03-1995 102 04-05-1996
Nagaraju Domala
FETCH
Syntax :
EXEC SQL
FETCH cursor-name
INTO :host-variable1, :host-variable2, ....
END-EXEC.
Example :
EXEC SQL
FETCH CUREMP01
INTO :WS-EMPNO, :WS-SEX, :WS-AGE, :WS-NAME
END-EXEC.
Nagaraju Domala
End-of-Data Processing
RESULT TABLE
105 15-02-1996
101 01-02-1996
102 04-05-1996
SQLCODE
WS-EMPNO WS-JOIN-DATE
105 15-02-1996 0
101 01-02-1996 0
FETCH 0
102 04-05-1996
Nagaraju Domala
Handling End-of-data
MAIN-PARA.
PERFORM FETCH-PARA.
PERFORM UNTIL SQLCODE = 100
PERFORM PROCESS-ROW
PERFORM FETCH-PARA
END-PERFORM.
...
Nagaraju Domala
CLOSE
Syntax:
EXEC SQL
CLOSE cursor-name
END-EXEC.
Example:
EXEC SQL
CLOSE CUREMP01
END-EXEC.
Nagaraju Domala
Outline of an Application
Program
IDENTIFICATION DIVISION.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
Include SQLCA
Declare Host variables
Include DCLGEN
Declare cursor1
PROCEDURE DIVISION.
Declare cursor2
Cursor operations...
Nagaraju Domala
Putting it all together
PERFORM FETCH-PARA.
PERFORM UNTIL SQLCODE = 100
PERFORM PROCESS-ROW
PERFORM FETCH-PARA
END-PERFORM
PERFORM CLOSE-PARA.
Nagaraju Domala
FOR UPDATE OF
EXEC SQL
DECLARE CUREMP01 CURSOR FOR
SELECT EMPNO, AGE
FROM EMPLOYEE
FOR UPDATE OF SALARY
END-EXEC.
Nagaraju Domala
UPDATE ... WHERE CURRENT OF
PERFORM FETCH-PARA.
PERFORM UNTIL SQLCODE = 100
.......
EXEC SQL
UPDATE EMPLOYEE
SET SALARY = :WS-SALARY
WHERE CURRENT OF CUREMP01
END-EXEC
PERFORM FETCH-PARA
END-PERFORM.
Nagaraju Domala
DELETE ... WHERE CURRENT
OF
PERFORM OPEN-PARA.
PERFORM FETCH-PARA.
PERFORM FETCH-PARA
END-PERFORM.
Nagaraju Domala
DECLARE ... WITH HOLD
EXEC SQL
DECLARE cursor-name CURSOR WITH HOLD FOR
SELECT column-name-list
FROM table-name
WHERE search-condition
FOR UPDATE OF column-name
END-EXEC.
Nagaraju Domala
WHENEVER
EXEC SQL
WHENEVER condition action
END-EXEC
Condition : SQLWARNING
SQLERROR
NOT FOUND
action : CONTINUE
GOTO or GO TO procedure/section
Nagaraju Domala