Bird
Raised Fist0
PostgreSQLquery~5 mins

LOOP, WHILE, FOR iterations in PostgreSQL

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Loops help you repeat actions many times without writing the same code again and again.
When you want to process each row in a table one by one.
When you need to repeat a task until a condition is met, like counting or checking values.
When you want to generate a series of numbers or dates automatically.
When you want to perform batch updates or inserts step by step.
When you want to automate repetitive database tasks inside a function.
Syntax
PostgreSQL
LOOP
  -- statements
END LOOP;

WHILE condition LOOP
  -- statements
END LOOP;

FOR record_variable IN query LOOP
  -- statements
END LOOP;
LOOP repeats forever until you use EXIT to stop it.
WHILE repeats as long as the condition is true.
FOR loops over each row returned by a query.
Examples
A simple LOOP that prints 'Hello!' once and then stops.
PostgreSQL
LOOP
  RAISE NOTICE 'Hello!';
  EXIT;
END LOOP;
A WHILE loop that counts from 1 to 3 and prints each number.
PostgreSQL
DO $$
DECLARE
  counter INT := 1;
BEGIN
  WHILE counter <= 3 LOOP
    RAISE NOTICE 'Count: %', counter;
    counter := counter + 1;
  END LOOP;
END $$;
A FOR loop that goes through each user and prints their id and name.
PostgreSQL
FOR rec IN SELECT id, name FROM users LOOP
  RAISE NOTICE 'User: % - %', rec.id, rec.name;
END LOOP;
Sample Program
This program uses a WHILE loop to print numbers from 1 to 5.
PostgreSQL
DO $$
DECLARE
  counter INT := 1;
BEGIN
  WHILE counter <= 5 LOOP
    RAISE NOTICE 'Number: %', counter;
    counter := counter + 1;
  END LOOP;
END $$;
OutputSuccess
Important Notes
Remember to use EXIT inside LOOP to avoid infinite loops.
Use RAISE NOTICE to print messages during loop execution.
FOR loops are great for processing query results row by row.
Summary
LOOP repeats code until you tell it to stop with EXIT.
WHILE repeats as long as a condition is true.
FOR loops go through each row from a query automatically.

Practice

(1/5)
1. What does a LOOP statement do in PostgreSQL procedural code?
easy
A. Executes code only if a condition is true at the start.
B. Runs the code only once and then stops automatically.
C. Goes through each row of a query automatically.
D. Repeats the code inside it until an EXIT command is reached.

Solution

  1. Step 1: Understand the LOOP statement

    A LOOP in PostgreSQL repeats the code inside it indefinitely until an EXIT command is used to stop it.
  2. Step 2: Compare with other loops

    Unlike WHILE or FOR, LOOP does not check a condition automatically; it relies on EXIT to stop.
  3. Final Answer:

    Repeats the code inside it until an EXIT command is reached. -> Option D
  4. Quick Check:

    LOOP repeats until EXIT [OK]
Hint: LOOP runs forever until EXIT stops it [OK]
Common Mistakes:
  • Thinking LOOP stops automatically without EXIT
  • Confusing LOOP with WHILE or FOR
  • Assuming LOOP checks conditions itself
2. Which of the following is the correct syntax to start a FOR loop iterating over rows from a query in PostgreSQL?
easy
A. FOR record FROM users LOOP
B. FOR (SELECT * FROM users) LOOP
C. FOR record IN SELECT * FROM users LOOP
D. FOR record WHILE SELECT * FROM users LOOP

Solution

  1. Step 1: Recall FOR loop syntax for query iteration

    The correct syntax uses FOR record IN SELECT ... LOOP to iterate over query rows.
  2. Step 2: Check each option

    FOR record IN SELECT * FROM users LOOP matches the correct syntax. Options B, C, and D are invalid or incomplete.
  3. Final Answer:

    FOR record IN SELECT * FROM users LOOP -> Option C
  4. Quick Check:

    FOR ... IN SELECT ... LOOP is correct syntax [OK]
Hint: FOR loops use 'IN SELECT' to iterate query rows [OK]
Common Mistakes:
  • Omitting IN keyword
  • Using parentheses incorrectly
  • Mixing WHILE syntax with FOR
3. What will be the output of this PostgreSQL code snippet?
DECLARE
  counter INT := 1;
  total INT := 0;
BEGIN
  WHILE counter <= 3 LOOP
    total := total + counter;
    counter := counter + 1;
  END LOOP;
  RAISE NOTICE 'Total: %', total;
END;
medium
A. Syntax error
B. Total: 6
C. Total: 0
D. Total: 3

Solution

  1. Step 1: Trace the WHILE loop iterations

    The loop runs while counter is 1, 2, and 3. Each time, total adds counter's value.
  2. Step 2: Calculate total after loop

    Total = 0 + 1 + 2 + 3 = 6 after the loop ends.
  3. Final Answer:

    Total: 6 -> Option B
  4. Quick Check:

    Sum 1+2+3 = 6 [OK]
Hint: Add counter each loop until condition false [OK]
Common Mistakes:
  • Stopping loop too early
  • Adding counter after increment
  • Confusing total initialization
4. Identify the error in this PostgreSQL loop code:
DECLARE
  i INT := 1;
BEGIN
  WHILE i < 5 LOOP
    RAISE NOTICE '%', i;
  END LOOP;
END;
medium
A. Missing increment of variable i inside the loop.
B. Incorrect declaration of variable i.
C. Syntax error in RAISE NOTICE statement.
D. WHILE condition should be i <= 5.

Solution

  1. Step 1: Check loop control variable usage

    The variable i is never increased inside the loop, so the condition i < 5 never becomes false.
  2. Step 2: Understand loop behavior

    Without increment, the loop runs forever causing an infinite loop error.
  3. Final Answer:

    Missing increment of variable i inside the loop. -> Option A
  4. Quick Check:

    Loop needs variable increment to stop [OK]
Hint: Always update loop variable to avoid infinite loops [OK]
Common Mistakes:
  • Forgetting to increment loop variable
  • Assuming loop stops automatically
  • Misreading WHILE condition
5. You want to sum the price column from a products table using a FOR loop in PL/pgSQL. Which code snippet correctly does this?
hard
A. DECLARE total NUMERIC := 0; BEGIN FOR rec IN SELECT price FROM products LOOP total := total + rec.price; END LOOP; RAISE NOTICE '%', total; END;
B. DECLARE total NUMERIC := 0; BEGIN FOR rec products LOOP total := total + rec.price; END LOOP; RAISE NOTICE '%', total; END;
C. DECLARE total NUMERIC := 0; BEGIN FOR rec FROM SELECT price FROM products LOOP total := total + rec.price; END LOOP; RAISE NOTICE '%', total; END;
D. DECLARE total NUMERIC := 0; BEGIN WHILE rec IN SELECT price FROM products LOOP total := total + rec.price; END LOOP; RAISE NOTICE '%', total; END;

Solution

  1. Step 1: Identify correct FOR loop syntax for query rows

    DECLARE total NUMERIC := 0; BEGIN FOR rec IN SELECT price FROM products LOOP total := total + rec.price; END LOOP; RAISE NOTICE '%', total; END; uses FOR rec IN SELECT price FROM products LOOP, which is correct syntax to iterate query results.
  2. Step 2: Verify accumulation and output

    Inside the loop, it adds rec.price to total and then outputs total with RAISE NOTICE.
  3. Final Answer:

    DECLARE total NUMERIC := 0; BEGIN FOR rec IN SELECT price FROM products LOOP total := total + rec.price; END LOOP; RAISE NOTICE '%', total; END; -> Option A
  4. Quick Check:

    FOR ... IN SELECT ... LOOP sums prices [OK]
Hint: Use FOR ... IN SELECT ... LOOP to sum column values [OK]
Common Mistakes:
  • Omitting IN keyword in FOR loop
  • Using WHILE instead of FOR for query rows
  • Incorrect loop variable or query syntax