A CURSOR is a database object used to retrieve, manipulate, and navigate through rows returned by a query one at a time.
Click to reveal answer
beginner
Why do we use a CURSOR instead of a simple SELECT statement?
We use a CURSOR when we need to process query results row by row, especially when each row requires individual handling or complex logic.
Click to reveal answer
intermediate
Name the main steps to use a CURSOR in SQL.
1. Declare the CURSOR with a SELECT query. 2. Open the CURSOR. 3. Fetch rows one by one. 4. Process each row. 5. Close the CURSOR. 6. Deallocate the CURSOR.
Click to reveal answer
intermediate
What happens if you forget to CLOSE or DEALLOCATE a CURSOR?
Not closing or deallocating a CURSOR can cause memory leaks and lock resources, slowing down or blocking the database.
Click to reveal answer
beginner
Give a simple example of DECLARE and OPEN a CURSOR in SQL.
DECLARE myCursor CURSOR FOR SELECT id, name FROM employees; OPEN myCursor;
Click to reveal answer
What is the first step when using a CURSOR in SQL?
ADeclare the CURSOR
BFetch data
CClose the CURSOR
DDeallocate the CURSOR
✗ Incorrect
You must first declare the CURSOR with a SELECT query before using it.
Which SQL command moves the CURSOR to the next row?
AOPEN
BCLOSE
CFETCH
DDECLARE
✗ Incorrect
FETCH retrieves the next row from the CURSOR.
What is the purpose of closing a CURSOR?
ATo start reading rows
BTo fetch the first row
CTo declare the CURSOR
DTo free resources and release locks
✗ Incorrect
Closing a CURSOR frees up resources and releases any locks held.
Which of these is NOT a typical CURSOR operation?
AOPEN
BINSERT
CDECLARE
DFETCH
✗ Incorrect
INSERT is a data modification command, not a CURSOR operation.
When should you consider using a CURSOR?
AWhen you need to process rows one by one
BWhen you want to process all rows at once
CWhen you want to delete a table
DWhen creating a new database
✗ Incorrect
CURSORs are useful when processing rows individually.
Explain the main steps to use a CURSOR in SQL and why each step is important.
Think about how you read a book page by page and then close it when done.
You got /6 concepts.
Describe a real-life situation where using a CURSOR would be helpful in a database.
Imagine you want to greet each friend by name one at a time.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of using a CURSOR in SQL?
easy
A. To process query results row by row
B. To speed up bulk data insertion
C. To create new tables dynamically
D. To automatically backup the database
Solution
Step 1: Understand what a cursor does
A cursor allows you to handle each row returned by a query individually, instead of all at once.
Step 2: Compare options to cursor purpose
Options B, C, and D describe tasks unrelated to row-by-row processing, which is the cursor's main use.
Final Answer:
To process query results row by row -> Option A
Quick Check:
Cursor = row-by-row processing [OK]
Hint: Remember: Cursor = handle rows one at a time [OK]
Common Mistakes:
Thinking cursor speeds up bulk inserts
Confusing cursor with table creation
Assuming cursor automates backups
2. Which of the following is the correct order of cursor operations in SQL?
easy
A. DECLARE, FETCH, OPEN, CLOSE, DEALLOCATE
B. OPEN, DECLARE, FETCH, CLOSE, DEALLOCATE
C. DECLARE, OPEN, FETCH, CLOSE, DEALLOCATE
D. FETCH, DECLARE, OPEN, CLOSE, DEALLOCATE
Solution
Step 1: Recall the cursor lifecycle
You first DECLARE the cursor, then OPEN it to start fetching rows, FETCH rows one by one, CLOSE it when done, and finally DEALLOCATE to free resources.
Step 2: Match the correct sequence
Only DECLARE, OPEN, FETCH, CLOSE, DEALLOCATE follows this exact order. Other options mix the steps incorrectly.
Final Answer:
DECLARE, OPEN, FETCH, CLOSE, DEALLOCATE -> Option C
Quick Check:
Cursor lifecycle order = C [OK]
Hint: Remember: Declare first, then open, fetch, close, deallocate [OK]
Common Mistakes:
Opening cursor before declaring
Fetching before opening
Not deallocating after closing
3. Given the following SQL cursor code snippet, what will be the output?
DECLARE @Name VARCHAR(50);
DECLARE name_cursor CURSOR FOR SELECT Name FROM Employees WHERE Department = 'Sales';
OPEN name_cursor;
FETCH NEXT FROM name_cursor INTO @Name;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @Name;
FETCH NEXT FROM name_cursor INTO @Name;
END
CLOSE name_cursor;
DEALLOCATE name_cursor;
Assuming the Employees table has Sales department names: 'Alice', 'Bob', 'Carol'.
medium
A. Only 'Alice' is printed
B. Syntax error due to missing FETCH
C. No output because cursor is not opened
D. Alice Bob Carol (each printed on a new line)
Solution
Step 1: Understand cursor fetch loop
The cursor fetches each row where Department = 'Sales'. It prints the @Name variable for each fetched row.
Step 2: Identify the printed names
Since the table has 'Alice', 'Bob', and 'Carol' in Sales, all three names will be printed one by one.
Final Answer:
Alice Bob Carol (each printed on a new line) -> Option D
Quick Check:
Cursor prints all fetched rows [OK]
Hint: Cursor loops print all fetched rows until none left [OK]
Common Mistakes:
Assuming only first row prints
Forgetting to open cursor
Confusing fetch status check
4. Identify the error in the following cursor code:
DECLARE cur CURSOR FOR SELECT Id FROM Products;
OPEN cur;
FETCH NEXT FROM cur INTO @ProductId;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @ProductId;
END
CLOSE cur;
DEALLOCATE cur;
medium
A. Missing FETCH NEXT inside the WHILE loop
B. Cursor not declared properly
C. Cursor not opened before fetching
D. No error, code runs fine
Solution
Step 1: Check fetch inside loop
The code fetches once before the loop but does not fetch again inside the loop, causing an infinite loop.
Step 2: Identify missing statement
To move to next row, FETCH NEXT must be inside the WHILE loop after PRINT.
Final Answer:
Missing FETCH NEXT inside the WHILE loop -> Option A
Quick Check:
Fetch inside loop needed to advance cursor [OK]
Hint: Always fetch next row inside the loop to avoid infinite loop [OK]
Common Mistakes:
Forgetting FETCH NEXT inside loop
Assuming one fetch is enough
Not opening cursor before fetch
5. You want to update the salary of employees one by one using a cursor. Which approach correctly uses a cursor for this task?
hard
A. Open cursor, but never fetch rows, then update salary
B. Declare cursor for SELECT, open it, fetch each employee, update salary inside loop, close and deallocate
C. Declare cursor, but update salary before opening cursor
D. Use a single UPDATE statement without cursor for all employees
Solution
Step 1: Understand row-by-row update need
When updating salaries individually, you must fetch each employee row and update inside the loop.
Step 2: Identify correct cursor usage
Declare cursor for SELECT, open it, fetch each employee, update salary inside loop, close and deallocate correctly declares, opens, fetches, updates inside loop, then closes and deallocates cursor.
Final Answer:
Declare cursor for SELECT, open it, fetch each employee, update salary inside loop, close and deallocate -> Option B
Quick Check:
Cursor updates row-by-row inside loop [OK]
Hint: Update inside fetch loop after opening cursor [OK]
Common Mistakes:
Trying to update before opening cursor
Not fetching rows before update
Using cursor but updating all at once
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.