If in a COBOL program we need to UPDATE or DELETE rows using a cursor-controlled result table, then we use DECLARE CURSOR and OPEN CURSOR statements to open a cursor-controlled table. Next, we use FETCH statement to move through the rows in the table. Then when we reach a row that we want to update or delete, we issue an UPDATE or DELETE statement statement to perform a positioned update or delete.
Consider the below examples :-
A DECLARE CURSOR statement for a customer table is given below -
Restrictions on UPDATE and DELETE statements :-
Consider the below examples :-
A DECLARE CURSOR statement for a customer table is given below -
EXEC SQL DECLARE CUSTCURS CURSOR WITH HOLD FOR SELECT CUSTNO, FNAME, LNAME, CITY, STATE FROM MM01.CUSTOMER WHERE INVCUST < '100000' FOR UPDATE OF FNAME, LNAME, CITY, STATE END-EXEC.An UPDATE statement that changes the row at the current cursor position -
EXEC SQL UPDATE MM01.CUSTOMER SET FNAME = :FNAME LNAME = :LNAME CITY = :CITY STATE = :STATE WHERE CURRENT OF CUSTCURS END-EXEC.A DELETE statement that removes the row at the current cursor position -
EXEC SQL DELETE FROM MM01.CUSTOMER WHERE CURRENT OF CUSTCURS END-EXEC.The WITH HOLD phrase that is coded in the DECLARE CURSOR statement in above example prevents the cursor from being closed when a commit operation takes place.
Restrictions on UPDATE and DELETE statements :-
- We cant update or delete a row in read-only table
- A cursor-controlled table is a read-only table when it uses those DB2 features that are incompatible with updating or deleting. For example, a SELECT statement within a DECLARE CURSOR statement uses the DISTINCT keyword, its resukt table is a read-only.
- A cursor controlled table is read-only , when the SELECT statement in the DECLARE CURSOR statement sues a UNION, some categories of subqueries, a column function or any of these keywords : DISTINCT, ORDER BY, GROUP BY and HAVING.
No comments:
Post a Comment