0
0
PostgreSQLquery~20 mins

CASE in PL/pgSQL in PostgreSQL - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
CASE Mastery in PL/pgSQL
Get all challenges correct to earn this badge!
Test your skills under time pressure!
query_result
intermediate
2:00remaining
Output of CASE expression in PL/pgSQL function
What is the output of the following PL/pgSQL function when called with input value 15?
CREATE OR REPLACE FUNCTION test_case(val INTEGER) RETURNS TEXT AS $$
DECLARE
  result TEXT;
BEGIN
  result := CASE 
    WHEN val < 10 THEN 'Less than 10'
    WHEN val <= 20 THEN 'Between 10 and 20'
    ELSE 'Greater than 20'
  END;
  RETURN result;
END;
$$ LANGUAGE plpgsql;

SELECT test_case(15);
PostgreSQL
CREATE OR REPLACE FUNCTION test_case(val INTEGER) RETURNS TEXT AS $$
DECLARE
  result TEXT;
BEGIN
  result := CASE 
    WHEN val < 10 THEN 'Less than 10'
    WHEN val <= 20 THEN 'Between 10 and 20'
    ELSE 'Greater than 20'
  END;
  RETURN result;
END;
$$ LANGUAGE plpgsql;

SELECT test_case(15);
A'Greater than 20'
B'Less than 10'
C'Between 10 and 20'
DNULL
Attempts:
2 left
💡 Hint
Think about which WHEN condition matches the input value 15 first.
📝 Syntax
intermediate
2:00remaining
Identify the syntax error in CASE statement
Which option contains a syntax error in the CASE statement inside a PL/pgSQL block?
PostgreSQL
DECLARE
  grade CHAR := 'B';
  result TEXT;
BEGIN
  result := CASE grade
    WHEN 'A' THEN 'Excellent'
    WHEN 'B' THEN 'Good'
    ELSE 'Average'
  END;
END;
AMissing semicolon after END of CASE expression
BMissing ELSE clause in CASE expression
CNo syntax error; code is correct
DMissing END CASE keyword
Attempts:
2 left
💡 Hint
Check if the CASE expression is properly terminated with a semicolon.
optimization
advanced
2:00remaining
Optimizing multiple CASE statements in PL/pgSQL
You have multiple CASE statements checking the same variable in a PL/pgSQL function. Which approach is more efficient?
PostgreSQL
DECLARE
  status INTEGER := 2;
  message TEXT;
BEGIN
  -- Option 1: Multiple CASE statements
  IF status = 1 THEN
    message := 'Start';
  ELSIF status = 2 THEN
    message := 'Processing';
  ELSE
    message := 'Unknown';
  END IF;

  -- Option 2: Single CASE statement
  message := CASE status
    WHEN 1 THEN 'Start'
    WHEN 2 THEN 'Processing'
    ELSE 'Unknown'
  END;
END;
AOption 2 is more efficient because it uses a single CASE expression
BOption 1 is more efficient because IF statements are faster
CBoth options have the same efficiency
DOption 1 is more readable and thus preferred
Attempts:
2 left
💡 Hint
Consider how many times the variable is evaluated and how concise the code is.
🧠 Conceptual
advanced
2:00remaining
Understanding CASE with NULL values in PL/pgSQL
What will be the output of this PL/pgSQL snippet when input_value is NULL?
DECLARE
  input_value INTEGER := NULL;
  output TEXT;
BEGIN
  output := CASE input_value
    WHEN 1 THEN 'One'
    WHEN NULL THEN 'Null'
    ELSE 'Other'
  END;
  RETURN output;
END;
PostgreSQL
DECLARE
  input_value INTEGER := NULL;
  output TEXT;
BEGIN
  output := CASE input_value
    WHEN 1 THEN 'One'
    WHEN NULL THEN 'Null'
    ELSE 'Other'
  END;
  RETURN output;
END;
ARaises an error due to NULL comparison
B'Null'
C'One'
D'Other'
Attempts:
2 left
💡 Hint
Remember how NULL comparisons behave in SQL and PL/pgSQL CASE expressions.
🔧 Debug
expert
3:00remaining
Debugging unexpected CASE behavior in PL/pgSQL
A developer wrote this PL/pgSQL function but it always returns 'Unknown' regardless of input. What is the bug?
CREATE OR REPLACE FUNCTION check_status(code TEXT) RETURNS TEXT AS $$
DECLARE
  result TEXT;
BEGIN
  result := CASE code
    WHEN 'A' THEN 'Active'
    WHEN 'I' THEN 'Inactive'
    ELSE 'Unknown'
  END;
  RETURN result;
END;
$$ LANGUAGE plpgsql;

-- Called as: SELECT check_status('a');
PostgreSQL
CREATE OR REPLACE FUNCTION check_status(code TEXT) RETURNS TEXT AS $$
DECLARE
  result TEXT;
BEGIN
  result := CASE code
    WHEN 'A' THEN 'Active'
    WHEN 'I' THEN 'Inactive'
    ELSE 'Unknown'
  END;
  RETURN result;
END;
$$ LANGUAGE plpgsql;

-- Called as: SELECT check_status('a');
AVariable 'result' is not initialized before assignment
BCASE expression is case-sensitive, so 'a' does not match 'A'
CFunction lacks RETURNS clause
DMissing ELSE clause causes default to 'Unknown'
Attempts:
2 left
💡 Hint
Check how string comparisons work in CASE expressions.