+ All Categories
Home > Technology > PLSQL Cursors

PLSQL Cursors

Date post: 02-Dec-2014
Category:
Upload: spinnaresh
View: 6,058 times
Download: 4 times
Share this document with a friend
Description:
 
Popular Tags:
20
PL/SQL Cursors By Praveen & Naresh
Transcript
Page 1: PLSQL Cursors

PL/SQL Cursors

By Praveen & Naresh

Page 2: PLSQL Cursors

What is Cursors ?

SQL: > SELECT * FROM employee;

Oracle RDBMS : Assigns a private work area for that stmt.

Page 3: PLSQL Cursors

contd..

PL/SQL cursor is a mechanism by which

“ you can NAME that work area

and

manipulate the information within it”

Page 4: PLSQL Cursors

Declare/Open/Fetch/Close

CURSOR emp_cur IS SELECT * FROM employee ;

Open emp_cur ;

Fetch emp_cur INTO emp_rec;

CLOSE emp_cur ;

Page 5: PLSQL Cursors

Types of cursors

Two Types:

1) Implicit

2) Explicit

Page 6: PLSQL Cursors

Cursor Attributes

Attribute:

%FOUND

%ISOPEN

%NOTFOUND

%ROWCOUNT

Page 7: PLSQL Cursors

Implicit Cursors

• DML Statements• INSERT, UPDATE, DELETE• SELECT statement with INTO clause

Page 8: PLSQL Cursors

Single Row Implicit Cursors

DECLARE

e_id employee.empid%TYPE;

e_name employee.empname%TYPE;

BEGIN

SELECT empid, empname INTO e_id, e_name

FROM employee where empid=23;

dbms_output.put_line( SQL%ROWCOUNT );

END;

/

Page 9: PLSQL Cursors

Multiple Row Implicit Cursors(1)

BEGIN

UPDATE employee SET emp_sal= emp_sal + 5000

where emp_deptid=1;

IF SQL%FOUND THEN

dbms_output.put_line('Updated:'|| SQL%ROWCOUNT );

ELSE

dbms_output.put_line( 'Nothing Updated' );

END;

/

Page 10: PLSQL Cursors

Multiple Row Implicit Cursors(2)

BEGIN

FOR e_cursor IN ( SELECT e_name FROM employee ) LOOP

dbms_output.put_line( e_cursor.e_name );

END LOOP;

END;

/

Page 11: PLSQL Cursors

Cursor FOR Loop

Scope : Inside FOR Loop

Cursor Index : - a pointer to Query work area.- Query work area is a memory region ( context

area )

Note:SQL%ROWCOUNT attribute returns NULL.

Page 12: PLSQL Cursors

Explicit Cursors

• Define inside declaration block• Static or dynamic SELECT stmt.• Open/Fetch/Close

Page 13: PLSQL Cursors

Syntax

• OPEN cursor_name [ (param1 , param2 ,....) ]

• FETCH cursor_name INTO (variable1,variable2,....)

• FETCH cursor_name INTO record_variable;

• CLOSE cursor_name;

Page 14: PLSQL Cursors

Static Explicit Cursors

• SQL SELECT – behavior doesn't change

Page 15: PLSQL Cursors

Static CursorDECLARE

eid employee.empid%TYPE;

ename employee.empname%TYPE;

CURSOR cur IS

SELECT empid, empname FROM employee ;

BEGIN

OPEN cur ;

LOOP

FETCH cur INTO eid , ename;

EXIT WHEN cur%NOTFOUND;

dbms_output.put_line( 'NAME' || cur.ename );

END LOOP;

CLOSE cur ;

END;

/

Page 16: PLSQL Cursors

Eg- Cursor For LoopDECLARE

CURSOR C IS

SELECT empid AS eid , empname AS ename FROM employee ;

BEGIN

FOR i IN C LOOP

dbms_output.put_line( 'NAME' || i.ename );

END LOOP;

END;

/

Page 17: PLSQL Cursors

Static Cursor( Record)DECLARE

TYPE emp_record IS RECORD ( eid NUMBER, ename VARCHAR2(30) );

employee EMP_RECORD;

CURSOR cur IS SELECT empid, empname FROM employee ;

BEGIN

OPEN cur ;

LOOP

FETCH cur INTO employee;

EXIT WHEN cur%NOTFOUND;

dbms_output.put_line( 'NAME' || employee.ename );

END LOOP;

CLOSE cur ;

END;

/

Page 18: PLSQL Cursors

Static Cursor( Record+FOR Loop)

DECLARE

TYPE emp_record IS RECORD ( eid NUMBER, ename VARCHAR2(30) );

explicit_employee EMP_RECORD;

CURSOR cur IS SELECT empid, empname FROM employee ;

BEGIN

FOR i IN cur LOOP

explicit_employee := i;

dbms_output.put_line( 'NAME' || explicit_employee.ename );

END LOOP;

END;

/

Note: No Data Found , No error is raised

Page 19: PLSQL Cursors

Static Cursor( No rows)DECLARE

TYPE emp_record IS RECORD ( eid NUMBER, ename VARCHAR2(30) );

employee EMP_RECORD;

CURSOR cur IS SELECT empid, empname FROM employee where empid = -1 ;

BEGIN

OPEN cur ;

LOOP

FETCH cur INTO employee;

IF cur%NOTFOUND THEN

IF cur%ROWCOUNT = 0 THEN

dbms_output.put_line( 'No Data Found' );

END IF;

EXIT;

ELSE

dbms_output.put_line( 'NAME' || employee.ename );

END IF;

END LOOP;

CLOSE cur ;

END;

/

Page 20: PLSQL Cursors

Thanks


Recommended