You are on page 1of 12

WORKING ON SCROLL CURSORS

UNDERSTANDING SCROLL CURSORS


LEARN VISUALLY WITH EXAMPLES
THIS DOCUMENT PROVIDES A BRIEF DESCRIPTION ON HOW
SCROLL CURSORS CAN BE USED TO FETCH ROWS BOTH IN
FORWARD AND BACKWARD DIRECTIONS.
DOCUMENT PREPARED BY:

JAVEED AHMED – Javeedahmed111@gmail.com


CONTENTS

1. STEPS TO IMPLEMENT CURSOR LOGIC


2. NON-SCROLLABLE CURSORS
3. SCROLLABLE CURSORS
4. INSENSITIVE SCROLL CURSORS
5. SENSITIVE SCROLL CURSORS
6. VARIOUS SCROLL CURSOR KEYWORDS
7. EXAMPLE
STEPS TO IMPLEMENT CURSOR LOGIC

➔ DB2 USES CURSORS TO NAVIGATE THROUGH A SET OF ROWS RETURNED


BY AN EMBEDDED SQL SELECT STATEMENT. A CURSOR CAN BE COMAPRED
TO A POINTER. THE PROGRAMMER DECLARES A CURSOR AND DEFINES THE
SQL STATEMENT FOR THE CURSOR. AFTER THAT YOU CAN USE THE CURSOR
LIKE A SEQUENTIAL FILE. THE CURSOR IS OPENED,ROWS ARE FETCHED
FROM THE CURSOR,ONE ROW AT A TIME AND AT THE END OF PROCESSING
THE CURSOR IS CLOSED.

➔ THE FOUR OPERATIONS THAT MUST BE PERFORMED FOR THE SUCCESFUL


WORKING OF THE CURSORS ARE:

➔ DECLARE CURSOR – THIS STATEMENT DEFINES THE CURSOR, GIVES A


NAME TO IT AND ASSIGNS AN SQL STATEMENT TO IT. THE DECLARE
STATEMENT DOESNOT EXECUTE THE SQL STATEMENT BUT MERELY DEFINES
IT.

➔ OPEN CURSOR – THIS READIES THE CURSOR FOR ROW RETRIEVAL. OPEN
IS AN EXECUTABLE STATEMENT. IT READS THE SQL SEARCH FIELDS ,
EXECUTES THE SQL STATEMENT AND SOMETIMES BUILD THE RESULT
TABLE.

➔ FETCH CURSOR – THIS STATEMENT RETURNS DATA FROM THE RESULT


TABLE ONE ROW AT A TIME TO THE HOST VARIABLES. IF THE RESULTS
TABLE IS NOY BUILT AT THE OPEN TIME, ITS BUILT DURING FETCH.

➔ CLOSE CURSOR – RELEASES ALL RESOURCES USED BY THE CURSOR.


NON SCROLLABLE CURSORS

THE SIMPLEST TYPE OF CURSOR IS A NON-SCROLLABLE CURSOR.


A NON-SCROLLABLE CURSOR ALWAYS MOVES SEQUENTIALLY FORWARD IN THE
RESULT TABLE. WHEN THE APPLICATION OPENS THE CURSOR, THE CURSOR IS
POSITIONED BEFORE THE FIRST ROW IN THE RESULT TABLE. WHEN THE
APPLICATION EXECUTES THE FIRST FETCH, THE CURSOR IS POSITIONED ON THE
FIRST ROW. WHEN THE APPLICATION EXECUTES SUBSEQUENT FETCH
STATEMENTS, THE CURSOR MOVES ONE ROW AHEAD FOR EACH FETCH. AFTER
EACH FETCH STATEMENT, THE CURSOR IS POSITIONED ON THE ROW THAT WAS
FETCHED.

AFTER THE APPLICATION EXECUTES A POSITIONED UPDATE OR POSITIONED


DELETE STATEMENT, THE CURSOR STAYS AT THE CURRENT ROW OF THE RESULT
TABLE. YOU CANNOT RETRIEVE ROWS BACKWARD OR MOVE TO A SPECIFIC
POSITION IN A RESULT TABLE WITH A NON-SCROLLABLE CURSOR.

EXAMPLE:
EXEC SQL
DECLARE CURSOR_NAME CURSOR FOR
SELECT EMPNO,EMPNAME
FROM EMPLOYEE
WHERE DEPT= : PA-DEPT
FOR UPDATE OF SALARY
END-EXEC.
SCROLLABLE CURSORS

TO MAKE A CURSOR SCROLLABLE, YOU DECLARE IT AS SCROLLABLE. TO USE A


SCROLLABLE CURSOR, YOU EXECUTE FETCH STATEMENTS THAT INDICATE
WHERE YOU WANT TO POSITION THE CURSOR.

IF YOU WANT TO ORDER THE ROWS OF THE CURSOR'S RESULT SET, AND YOU
ALSO WANT THE CURSOR TO BE UPDATABLE, YOU NEED TO DECLARE THE
CURSOR AS SCROLLABLE, EVEN IF YOU USE IT ONLY TO RETRIEVE ROWS
SEQUENTIALLY. YOU CAN USE THE ORDER BY CLAUSE IN THE DECLARATION OF
AN UPDATABLE CURSOR ONLY IF YOU DECLARE THE CURSOR AS SCROLLABLE.
INSENSITIVE SCROLL CURSORS

DECLARATION OF INSENSITIVE SCROLL CURSOR:

EXEC SQL DECLARE C1 INSENSITIVE SCROLL CURSOR FOR


SELECT COLNAMES
FROM TABLE NAME
END-EXEC.

WHAT ARE THE EFFECTS WHEN INSENSITIVE TYPE OF CURSOR IS


USED

➔ THE SIZE, THE ORDER OF THE ROWS, AND THE VALUES FOR EACH ROW OF
THE RESULT TABLE DO NOT CHANGE AFTER THE APPLICATION OPENS THE
CURSOR.

➔ THE RESULT TABLE IS READ-ONLY. THEREFORE, YOU CANNOT DECLARE


THE CURSOR WITH THE FOR UPDATE CLAUSE, AND YOU CANNOT USE THE
CURSOR FOR POSITIONED UPDATE OR DELETE OPERATIONS.
SENSITIVE SCROLL CURSORS

DECLARATION OF SENSITIVE SCROLL CURSOR:

EXEC SQL DECLARE C2 SENSITIVE STATIC SCROLL CURSOR FOR


SELECT COLNAMES
FROM TABLE NAME
END-EXEC.

EXEC SQL DECLARE C2 SENSITIVE DYNAMIC SCROLL CURSOR FOR


SELECT COLNAMES
FROM TABLE NAME
END-EXEC.

WHAT ARE THE EFFECTS WHEN SENSITIVE STATIC SCROLL CURSORS


ARE USED

➔ WHEN THE APPLICATION EXECUTES POSITIONED UPDATE AND DELETE


STATEMENTS WITH THE CURSOR, THOSE CHANGES ARE VISIBLE IN THE
RESULT TABLE.

➔ CHANGES THAT ARE MADE TO THE UNDERLYING TABLE BY OTHER


CURSORS OR OTHER APPLICATION PROCESSES CAN BE VISIBLE IN THE
RESULT TABLE, DEPENDING ON WHETHER THE FETCH STATEMENTS THAT
YOU USE WITH THE CURSOR ARE FETCH INSENSITIVE OR FETCH SENSITIVE
STATEMENTS.
WHAT ARE THE EFFECTS WHEN SENSITIVE DYNAMIC SCROLL
CURSORS ARE USED

➔ WHEN THE APPLICATION EXECUTES POSITIONED UPDATE AND DELETE


STATEMENTS WITH THE CURSOR, THOSE CHANGES ARE VISIBLE.

➔ IN ADDITION, WHEN THE APPLICATION EXECUTES INSERT, UPDATE, OR


DELETE OPERATIONS (WITHIN THE APPLICATION BUT OUTSIDE THE
CURSOR),THOSE CHANGES ARE VISIBLE.

➔ ALL COMMITTED INSERTS, UPDATES, AND DELETES BY OTHER


APPLICATION PROCESSES ARE VISIBLE.

➔ THE FETCH STATEMENT EXECUTES AGAINST THE BASE TABLE, THE CURSOR
NEEDS NO TEMPORARY RESULT TABLE. WHEN YOU DEFINE A CURSOR AS
SENSITIVE DYNAMIC, YOU CANNOT SPECIFY THE INSENSITIVE KEYWORD
IN A FETCH STATEMENT FOR THAT CURSOR.
KEYWORDS

THE FOLLOWING KEY WORDS ARE SUPPORTED WHEN FETCHING DATA FROM A
SCROLLABLE CURSOR:
TABLE 1:
[OPTIONS AVAILABLE FOR FETCHING RECORDS]
NEXT WILL FETCH THE NEXT ROW
PRIOR WILL FETCH THE PREVIOUS ROW
FIRST WILL FETCH THE FIRST ROW
LAST WILL FETCH THE LAST ROW
CURRENT WILL RE-FETCH THE CURRENT ROW
BEFORE WILL POSITION THE CURSOR BEFORE THE FIRST ROW
AFTER WILL POSITION THE CURSOR AFTER THE LAST ROW
ABSOLUTE N WILL FETCH THE ROW THAT IS N ROWS AWAY FROM THE
FIRST ROW
RELATIVE N WILL FETCH THE ROW THAT IS N ROWS AWAT FROM THE
LAST ROW FETCHED

FOR BOTH ABSOLUTE AND RELATIVE, THE NUMBER N MUST BE AN INTEGER. IT


CAN BE EITHER A POSITIVE OR A NEGATIVE NUMBER, AND IT CAN BE
REPRESENTED AS A NUMERIC CONSTANT OR AS A HOST VARIABLE.
NOTE:
➔ ABSOLUTE KEYWORD IS INDEPENDENT OF THE CURSOR POSITION.
➔ RELATIVE KEYWORD IS DEPENDENT ON THE CURRENT CURSOR POSITION.
SAMPLE EXAMPLE

EXAMPLE: IF THERE ARE 10 RECORDS PRESENT THEN HOW WILL THESE


KEYWORDS ACCESS THE LOCATION.
TABLE 2:
LOC1 FIRST,ABSOLUTE +1
LOC2 ABSOLUTE +2 , RELATIVE -2
LOC3 REALATIVE -1, PRIOR
LOC4.
IF CURSOR IS
AT THIS
POSITION
LOC5 RELATIVE +1
LOC6 ABSOLUTE +6 , RELATIVE +2
LOC7 RELATIVE +3
LOC8 RELATIVE +4
LOC9 ABSOLUTE -2
LOC10 LAST,ABSOLUTE -1

PLEASE REFER TABLE 1 TO KNOW THE DEFINITIONS OF THE KEYWORDS USED IN


TABLE 2.
SAMPLE 1:
DECLARE-CURSOR.
EXEC SQL DECLARE JD SENSITIVE SCROLL CURSOR FOR
SELECT …...
FROM …....
END-EXEC.

OPEN-CURSOR.
EXEC SQL
OPEN JD
END-EXEC.

RELATIVE-FETCH.
EXEC SQL
FETCH SENSITIVE REALTIVE :WS-FETCH-NO
FROM JD INTO :NAME , :AGE
END-EXEC.
HERE YOU CAN MOVE -1, +1 OR THE REQUIRED RELATIVE NUMBER TO :WS-
FETCH-NO .
SIMILARLY YOU CAN USE THE OTHER KEYWORDS DISCUSSED BEFORE IN
TABLE-1.
DOCUMENT PREPARED BY:
NAME : JAVEED AHMED
EMAIL ID : JaveedAhmed111@Gmail.Com

OTHER DOCUMENTS PREPARED ARE :


WORKING ON SDF II TOOL
UNDERSTANDING SDF II TOOL
LEARN VISUALLY WITH EXAMPLES

You might also like