Sie sind auf Seite 1von 17

MAINFRAMES

DB2 – IBM Data Base


NAGARAJU DOMALA
DB2

“ Application Program Using


Cursor“
Session 11

Nagaraju Domala
Session 11 - Objectives

On completion of this session the learner will be able to:

 Explain the concepts of Cursor


 Explain different operations of cursor
 Write an application program with cursors

Nagaraju Domala
Concepts of Cursors

Processing Multiple Rows

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

105 15-02-1996 RESULT TABLE

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

102 04-05-1996 100

Nagaraju Domala
Handling End-of-data

MAIN-PARA.

MOVE ‘01-01-1996’ TO WS-JOIN-DATE.


PERFORM OPEN-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

MOVE ‘01-01-1996’ TO WS-JOIN-DATE.


PERFORM OPEN-PARA.

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 UNTIL SQLCODE = 100


EXEC SQL
DELETE FROM EMPLOYEE
WHERE CURRENT OF CUREMP01
END-EXEC

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

Das könnte Ihnen auch gefallen