• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar

Coder Tutorial

  • Home
  • HTML
  • CSS
  • PHP
  • SQL
  • MySQL
  • JS
  • PL/SQL
  • Python
  • Java
  • Oracle

PL/SQL Cursors

PL/SQL Cursors

PL/SQL uses implicit and explicit cursors.
PL/SQL declare a implicit cursor for each operation to data manipulation in SQL.
If you want precise control over the queries, you can declare a explicit cursor;
You can define a explicit cursor for the queries which returns more than one row.

1. Implicit Cursors

The implicit cursors are managed automatically by the PL/SQL.

2. Explicit Cursors

When you need precise control over the outcome of the queries, must be declared a explicit cursor in PL/SQL.
The commands for a explicit cursor: OPEN, FETCH and CLOSE. First time the cursor must be opened through the OPEN command. Then you can run FETCH repeated until all records have been read or you can use BULK COLLECT clause to read all recording only once. For close a cursor uses the CLOSE command.

The attributes of the cursors

The attributes of the implicit cursors can return information about DML and DDL execution commands such as INSERT, UPDATE, DELETE, SELECT INTO, COMMIT or ROLLBACK.
The cursor attributes are: %FOUND, %ISOPEN, %NOTFOUND and %ROWCOUNT.

SQL%FOUND

Until SQL data manipulation is executed, the attribute %FOUND is NULL.

Example:

CREATE TABLE stu_temp AS SELECT * FROM students;
DECLARE
	v_id NUMBER:=3;
BEGIN
	DELETE FROM stu_temp WHERE student_id = v_id;
	IF SQL%FOUND THEN 
	INSERT INTO stu_temp(student_id, first_name, last_name, gender) 
	SELECT s.student_id, s.first_name, s.last_name, s.gender 
	FROM students s
	WHERE s.student_id=v_id;
	END IF;
END;

SQL%ISOPEN

Oracle database closes the cursor automatically after execution of commands. You must check if the cursor is open.

SQL%NOTFOUND

%NOTFOUND is the opposite attribute of %FOUND.

SQL%ROWCOUNT

%ROWCOUNT returns the number of records affected by one of the commands like INSERT, UPDATE or DELETE.

Example: Using SQL%ROWCOUNT

CREATE TABLE stu_temp AS SELECT * FROM students;
DECLARE
	v_id NUMBER:=3;
BEGIN
	DELETE FROM stu_temp WHERE student_id = v_id;
	DBMS_OUTPUT.PUT_LINE('Number of students deleted: '||SQL%ROWCOUNT); 
END;

%ROWTYPE

DECLARE
	stu_row students%ROWTYPE; 
BEGIN
	SELECT * INTO stu_row 
	FROM students WHERE student_id=3;
	DBMS_OUTPUT.PUT_LINE('First name: '||stu_row.first_name);
	DBMS_OUTPUT.PUT_LINE('Last name: '||stu_row.last_name);
END;

Filed Under: PL/SQL

Primary Sidebar

Tutorials

  • HTML Tutorial
  • CSS Tutorial
  • PHP Tutorial
  • SQL Tutorial
  • MySQL Tutorial
  • JavaScript Tutorial
  • Python Tutorial
  • PL/SQL Tutorial
  • Java Tutorial
  • SQLPlus Tutorial
  • Oracle Tutorial
  • PostgreSQL Tutorial
  • Ruby Tutorial

Secondary Sidebar

    • PL/SQL Tutorial
    • PL/SQL Blocks
    • PL/SQL Variables
    • PL/SQL Control structures
    • PL/SQL Collections and Records
    • PL/SQL Cursors
    • PL/SQL Stored Procedures
    • PL/SQL Functions
    • PL/SQL Packages
    • PL/SQL Exception Handling
    • PL/SQL Triggers
    • PL/SQL If-Then-Else Statement
    • PL/SQL For Loop
    • PL/SQL While Loop
    • PL/SQL Case Statement
    • PL/SQL Varray
    • PL/SQL Nested Table
    • PL/SQL Indexed Arrays
    • PL/SQL Record
    • PL/SQL Examples
    • Oracle PL/SQL Functions
    • PL/SQL Interview Questions

Copyright  2018 - 2021 Coder Tutorial

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Cookie settingsACCEPT
Privacy & Cookies Policy

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.
Necessary
Always Enabled

Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.

Non-necessary

Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.

SAVE & ACCEPT