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
Create a Simple PostgreSQL Function
📖 Scenario: You are working as a database assistant for a small bookstore. The store wants to have a quick way to calculate the total price of books including tax.
🎯 Goal: Build a PostgreSQL function named calculate_total_price that takes a book price as input and returns the price including a fixed tax rate.
📋 What You'll Learn
Create a function named calculate_total_price
The function should accept one parameter named price of type numeric
The function should return a numeric value
Inside the function, calculate the total price by adding 10% tax to the input price
Use the LANGUAGE plpgsql syntax for the function
💡 Why This Matters
🌍 Real World
Functions in databases help automate calculations like pricing, taxes, and discounts, saving time and reducing errors.
💼 Career
Knowing how to write database functions is useful for database administrators, backend developers, and data analysts to implement business logic inside the database.
Progress0 / 4 steps
1
Create the function header
Write the first line to create a function named calculate_total_price that accepts one parameter called price of type numeric and returns numeric.
PostgreSQL
Hint
Use CREATE FUNCTION function_name(parameter_name parameter_type) RETURNS return_type syntax.
2
Add the function body start
Add the AS $$ line and start the BEGIN block after the function header.
PostgreSQL
Hint
Use AS $$ to start the function body and BEGIN to start the block.
3
Write the calculation and return statement
Inside the BEGIN block, write a RETURN statement that returns the price plus 10% tax (price * 1.10).
PostgreSQL
Hint
Use RETURN price * 1.10; to add 10% tax.
4
Close the function body and specify language
Add the END; line, the closing $$, and specify LANGUAGE plpgsql; to complete the function.
PostgreSQL
Hint
Close the block with END;, then close the body with $$ and specify the language.
Practice
(1/5)
1. What is the purpose of the CREATE FUNCTION statement in PostgreSQL?
easy
A. To delete rows from a table
B. To create a new table in the database
C. To insert data into an existing table
D. To define a reusable block of code that can be called later
Solution
Step 1: Understand the role of functions in PostgreSQL
Functions store reusable code inside the database to perform tasks repeatedly.
Step 2: Identify what CREATE FUNCTION does
This statement defines a new function with parameters, return type, and body.
Final Answer:
To define a reusable block of code that can be called later -> Option D
Quick Check:
CREATE FUNCTION defines reusable code [OK]
Hint: Functions store reusable code blocks in the database [OK]
Common Mistakes:
Confusing function creation with table creation
Thinking it inserts or deletes data directly
Mixing up functions with SQL commands like SELECT or DELETE
2. Which of the following is the correct basic syntax to create a function in PostgreSQL that returns an integer?
easy
A. CREATE FUNCTION myfunc() RETURNS int AS $$ BEGIN RETURN 1; END; $$ LANGUAGE plpgsql;
B. CREATE FUNCTION myfunc RETURNS int AS $$ RETURN 1; $$ LANGUAGE plpgsql;
C. CREATE FUNCTION myfunc() RETURNS integer BEGIN RETURN 1; END LANGUAGE plpgsql;
D. CREATE FUNCTION myfunc() RETURNS int AS BEGIN RETURN 1; END LANGUAGE plpgsql;
Solution
Step 1: Check the correct syntax for function creation
The syntax requires parentheses after the function name, the RETURNS clause, the function body enclosed in $$, and the LANGUAGE specified.
Step 2: Validate each option
CREATE FUNCTION myfunc() RETURNS int AS $$ BEGIN RETURN 1; END; $$ LANGUAGE plpgsql; correctly uses parentheses, RETURNS int, AS $$ ... $$, and LANGUAGE plpgsql. Others miss parentheses, AS $$, or semicolons.
Final Answer:
CREATE FUNCTION myfunc() RETURNS int AS $$ BEGIN RETURN 1; END; $$ LANGUAGE plpgsql; -> Option A
Quick Check:
Correct syntax includes parentheses, RETURNS, AS $$, LANGUAGE [OK]
Hint: Always use () after function name and AS $$ for body [OK]
Common Mistakes:
Omitting parentheses after function name
Missing AS $$ ... $$ around function body
Not specifying LANGUAGE plpgsql
Forgetting semicolons inside function body
3. Given the function below, what will be the output of SELECT add_one(5);?
CREATE FUNCTION add_one(x integer) RETURNS integer AS $$ BEGIN RETURN x + 1; END; $$ LANGUAGE plpgsql;
medium
A. 6
B. Syntax error
C. 5
D. NULL
Solution
Step 1: Understand the function logic
The function takes an integer input x and returns x + 1.
Step 2: Apply the input value 5
Calling add_one(5) returns 5 + 1 = 6.
Final Answer:
6 -> Option A
Quick Check:
Input 5 plus 1 equals 6 [OK]
Hint: Function adds 1 to input, so 5 becomes 6 [OK]
Common Mistakes:
Confusing input and output values
Expecting syntax error due to unfamiliarity
Assuming function returns NULL without reason
4. Identify the error in the following function definition:
CREATE FUNCTION multiply_by_two(x integer) RETURNS integer AS $$ BEGIN RETURN x * 2 END; $$ LANGUAGE plpgsql;
medium
A. Missing RETURNS clause
B. Incorrect function name syntax
C. Missing semicolon after RETURN statement
D. LANGUAGE plpgsql is not allowed
Solution
Step 1: Review function body syntax
In PL/pgSQL, each statement inside the function body must end with a semicolon.
Step 2: Locate missing semicolon
The RETURN statement lacks a semicolon after x * 2, causing a syntax error.
Final Answer:
Missing semicolon after RETURN statement -> Option C
Quick Check:
Statements inside function need semicolons [OK]
Hint: Check for semicolons after each statement inside function [OK]
Common Mistakes:
Forgetting semicolon after RETURN
Misplacing LANGUAGE clause
Omitting RETURNS clause
Using invalid function names
5. You want to create a PostgreSQL function concat_names that takes two text parameters and returns their concatenation separated by a space. Which of the following is the correct function definition?
hard
A. CREATE FUNCTION concat_names(a text, b text) RETURNS text AS $$ RETURN a + ' ' + b; $$ LANGUAGE plpgsql;
B. CREATE FUNCTION concat_names(a text, b text) RETURNS text AS $$ BEGIN RETURN a || ' ' || b; END; $$ LANGUAGE plpgsql;
C. CREATE FUNCTION concat_names(a text, b text) RETURNS text AS $$ BEGIN RETURN concat(a, ' ', b); END $$ LANGUAGE plpgsql;
D. CREATE FUNCTION concat_names(a text, b text) RETURNS text AS $$ BEGIN RETURN a & ' ' & b; END; $$ LANGUAGE plpgsql;
Solution
Step 1: Understand string concatenation in PostgreSQL
PostgreSQL uses the || operator to concatenate strings.
Step 2: Evaluate each option's concatenation method
CREATE FUNCTION concat_names(a text, b text) RETURNS text AS $$ BEGIN RETURN a || ' ' || b; END; $$ LANGUAGE plpgsql; uses || correctly with BEGIN...END and semicolons. CREATE FUNCTION concat_names(a text, b text) RETURNS text AS $$ RETURN a + ' ' + b; $$ LANGUAGE plpgsql; uses + which is invalid for text. CREATE FUNCTION concat_names(a text, b text) RETURNS text AS $$ BEGIN RETURN concat(a, ' ', b); END $$ LANGUAGE plpgsql; misses semicolon after END. CREATE FUNCTION concat_names(a text, b text) RETURNS text AS $$ BEGIN RETURN a & ' ' & b; END; $$ LANGUAGE plpgsql; uses & which is invalid.
Final Answer:
CREATE FUNCTION concat_names(a text, b text) RETURNS text AS $$ BEGIN RETURN a || ' ' || b; END; $$ LANGUAGE plpgsql; -> Option B
Quick Check:
Use || for text concatenation in PL/pgSQL [OK]
Hint: Use || operator for text concatenation in PostgreSQL functions [OK]