Open In App

PL/SQL Cursor FOR LOOP

Last Updated : 23 Oct, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

Oracle PL/SQL is a powerful extension of SQL, specifically designed to provide procedural capabilities for Oracle databases. It allows developers to write complex programs that combine SQL queries with procedural constructs like loops, conditionals, and exception handling. Among these features, PL/SQL facilitates efficient data processing with cursors, which handle query results one row at a time. The PL/SQL Cursor FOR LOOP simplifies cursor management by automatically handling the fetching and looping through each row of the result set.

This article takes a deep dive into the FOR LOOP's intricacies, unraveling its syntax, usage, and the various benefits it offers. Through two examples, complete with code snippets and detailed output explanations, we'll showcase the remarkable versatility of this construct.

PL/SQL Cursor FOR LOOP

The PL/SQL FOR LOOP is a construct designed for repetitive execution, enabling developers to iterate over a specified range of values or through elements in collections. When used with cursors, the FOR LOOP can handle the processing of query results efficiently, automatically fetching rows and iterating over them without requiring explicit OPEN, FETCH, and CLOSE commands for the cursor

The FOR LOOP in PL/SQL is purpose-built for seamless iteration, whether traversing a range of values or cycling through collection elements. The fundamental syntax is elegantly straightforward:

    ---Standard FOR LOOP
FOR loop_index IN [REVERSE] lower_bound..upper_bound
LOOP
    -- Statements to be executed in each iteration
END LOOP;
  • loop_index: The loop index or counter variable.
  • lower_bound and upper_bound: The range of values for the loop index.
  • REVERSE (optional): Allows looping in reverse order.

Process:

  • Initialize the loop index to the lower bound.
  • Execute the statements within the loop.
  • Increment or decrement the loop index.
  • Repeat the process until the loop index reaches the upper bound.

Syntax:

For Standard FOR LOOP:

-- Basic FOR LOOP
FOR loop_index IN lower_bound..upper_bound
LOOP
    -- Statements to be executed in each iteration
END LOOP;

For Reverse FOR LOOP:

-- FOR LOOP in Reverse
FOR loop_index IN REVERSE lower_bound..upper_bound
LOOP
    -- Statements to be executed in each iteration
END LOOP;

Example of PL/SQL Cursor FOR LOOP

Through two illuminating examples, complete with code snippets and detailed output explanations, we'll showcase the remarkable versatility of this construct.

Example 1: Using Cursor FOR LOOP to Print Numbers

This example demonstrates how to print sequential numbers from 1 to 5 using a FOR LOOP.

-- Using FOR LOOP to Print Numbers
DECLARE
    -- Loop index
    loop_index NUMBER := 1;
BEGIN
    FOR loop_index IN 1..5
    LOOP
        DBMS_OUTPUT.PUT_LINE('Number: ' || loop_index);
    END LOOP;
END;
/

Output:

Number: 1
Number: 2
Number: 3
Number: 4
Number: 5

Explanation: In this example, the FOR LOOP effortlessly prints the numbers from 1 to 5 using the DBMS_OUTPUT.PUT_LINE statement. The loop index dynamically changes in each iteration, providing a concise and readable solution for printing sequential numbers.

Example 2: Using Cursor FOR LOOP to Update Records

the intricacies of how the loop index dynamically influences specific departments, showcasing the FOR LOOP's inherent prowess in efficiently managing targeted updates.

-- Using FOR LOOP to Update Records
DECLARE
    -- Loop index
    loop_index NUMBER := 1;
BEGIN
    FOR loop_index IN 1..3
    LOOP
        UPDATE employees
        SET salary = salary * 1.1
        WHERE department_id = loop_index;
    END LOOP;
    COMMIT;
END;
/

Explanation: This example updates employees' salaries in three different departments by multiplying their current salaries by 1.1. The loop index dynamically determines the specific departments being updated. The COMMIT statement finalizes the changes.

Important Points About PL/SQL Cursor FOR LOOP

  • While Cursor FOR LOOPs are convenient, they may not be the best choice for processing very large datasets. In such cases, consider using bulk operations like BULK COLLECT for better performance.
  • The cursor can be declared locally within the same block or as a parameterized cursor, depending on the use case.
  • The loop terminates automatically when all rows in the cursor's result set have been processed, without needing an explicit exit condition.
  • Cursor FOR LOOPs can only be used for read-only operations. If you need to update the fetched data, you should use a different approach or manage cursors manually.



Next Article
Article Tags :

Similar Reads