Bird
Raised Fist0
PostgreSQLquery~30 mins

Function creation syntax in PostgreSQL - Mini Project: Build & Apply

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
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

  1. Step 1: Understand the role of functions in PostgreSQL

    Functions store reusable code inside the database to perform tasks repeatedly.
  2. Step 2: Identify what CREATE FUNCTION does

    This statement defines a new function with parameters, return type, and body.
  3. Final Answer:

    To define a reusable block of code that can be called later -> Option D
  4. 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

  1. 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.
  2. 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.
  3. Final Answer:

    CREATE FUNCTION myfunc() RETURNS int AS $$ BEGIN RETURN 1; END; $$ LANGUAGE plpgsql; -> Option A
  4. 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

  1. Step 1: Understand the function logic

    The function takes an integer input x and returns x + 1.
  2. Step 2: Apply the input value 5

    Calling add_one(5) returns 5 + 1 = 6.
  3. Final Answer:

    6 -> Option A
  4. 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

  1. Step 1: Review function body syntax

    In PL/pgSQL, each statement inside the function body must end with a semicolon.
  2. Step 2: Locate missing semicolon

    The RETURN statement lacks a semicolon after x * 2, causing a syntax error.
  3. Final Answer:

    Missing semicolon after RETURN statement -> Option C
  4. 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

  1. Step 1: Understand string concatenation in PostgreSQL

    PostgreSQL uses the || operator to concatenate strings.
  2. 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.
  3. Final Answer:

    CREATE FUNCTION concat_names(a text, b text) RETURNS text AS $$ BEGIN RETURN a || ' ' || b; END; $$ LANGUAGE plpgsql; -> Option B
  4. Quick Check:

    Use || for text concatenation in PL/pgSQL [OK]
Hint: Use || operator for text concatenation in PostgreSQL functions [OK]
Common Mistakes:
  • Using + or & instead of || for strings
  • Forgetting semicolon after END
  • Missing BEGIN...END block for multiple statements