Functions and procedures help organize database tasks. Choosing the right one makes your work easier and clearer.
Use a function when you need to return a single value, like calculating a total price.
Use a procedure when you want to perform actions like updating multiple tables.
Use a function inside a query to get a value for each row.
Use a procedure to run a set of commands that do not return a value directly.
Use a function when you want to reuse a calculation in many places.
Syntax
SQL
CREATE FUNCTION function_name(parameters) RETURNS return_type AS $$
BEGIN
-- function logic
RETURN value;
END;
$$ LANGUAGE plpgsql;
CREATE PROCEDURE procedure_name(parameters) AS $$
BEGIN
-- procedure logicEND;
$$ LANGUAGE plpgsql;
Functions always return a value.
Procedures do not return values but can return results via output parameters or affect the database.
Examples
This function returns a 10% discount on the price.
SQL
CREATE FUNCTION get_discount(price numeric) RETURNS numeric AS $$
BEGIN
RETURN price * 0.9;
END;
$$ LANGUAGE plpgsql;
This procedure reduces the stock of a product by a given amount.
SQL
CREATE PROCEDURE update_stock(product_id int, amount int) AS $$
BEGIN
UPDATE products SET stock = stock - amount WHERE id = product_id;
END;
$$ LANGUAGE plpgsql;
Sample Program
The function calculate_tax returns 7% tax of an amount. The procedure apply_tax uses this function to update the tax for an order.
SQL
CREATE FUNCTION calculate_tax(amount numeric) RETURNS numeric AS $$
BEGIN
RETURN amount * 0.07;
END;
$$ LANGUAGE plpgsql;
CREATE PROCEDURE apply_tax(order_id int) AS $$
DECLARE
order_amount numeric;
tax_amount numeric;
BEGIN
SELECT total INTO order_amount FROM orders WHERE id = order_id;
tax_amount := calculate_tax(order_amount);
UPDATE orders SET tax = tax_amount WHERE id = order_id;
END;
$$ LANGUAGE plpgsql;
-- Example usage:-- SELECT calculate_tax(100);-- CALL apply_tax(1);
OutputSuccess
Important Notes
Functions can be used in SELECT queries; procedures cannot.
Procedures can perform complex tasks like transactions and multiple updates.
Use functions for calculations and procedures for actions.
Summary
Functions return values and can be used in queries.
Procedures perform actions and do not return values directly.
Choose functions for calculations and procedures for tasks.
Practice
(1/5)
1. Which of the following is true about SQL functions compared to procedures?
easy
A. Functions return a value and can be used in SELECT queries.
B. Functions perform actions but do not return any value.
C. Procedures always return a value and can be used in WHERE clauses.
D. Procedures can be used inside SELECT statements like functions.
Solution
Step 1: Understand the purpose of functions
Functions are designed to return a value and can be called within queries like SELECT.
Step 2: Compare with procedures
Procedures perform tasks but do not return values directly and cannot be used inside SELECT statements.
Final Answer:
Functions return a value and can be used in SELECT queries. -> Option A
2. Which of the following is the correct syntax to create a SQL function that returns an integer?
easy
A. CREATE PROCEDURE getCount() BEGIN RETURN 10; END;
B. CREATE PROCEDURE getCount() RETURNS INT BEGIN RETURN 10; END;
C. CREATE FUNCTION getCount() BEGIN RETURN 10; END;
D. CREATE FUNCTION getCount() RETURNS INT BEGIN RETURN 10; END;
Solution
Step 1: Identify function syntax
Functions require specifying RETURNS type and a RETURN statement inside BEGIN...END.
Step 2: Check options for correctness
CREATE FUNCTION getCount() RETURNS INT BEGIN RETURN 10; END; correctly declares a function with RETURNS INT and returns a value. Others either use PROCEDURE or miss RETURNS.
Final Answer:
CREATE FUNCTION getCount() RETURNS INT BEGIN RETURN 10; END; -> Option D
Quick Check:
Functions need RETURNS and RETURN [OK]
Hint: Functions need RETURNS and RETURN statements [OK]
Common Mistakes:
Using PROCEDURE keyword for functions
Omitting RETURNS clause in function
Using RETURN in procedures incorrectly
3. Given the following SQL code, what will be the output of SELECT calculateTax(100); if calculateTax is a function that returns 10% of the input amount?
CREATE FUNCTION calculateTax(amount INT) RETURNS INT BEGIN RETURN amount * 0.1; END;
medium
A. 100
B. 0.1
C. 10
D. Error: Cannot multiply INT by decimal
Solution
Step 1: Understand function logic
The function multiplies the input amount by 0.1 to calculate 10% tax.
Step 2: Calculate output for input 100
100 * 0.1 = 10, so the function returns 10.
Final Answer:
10 -> Option C
Quick Check:
100 * 0.1 = 10 [OK]
Hint: Multiply input by 0.1 to get 10% tax [OK]
Common Mistakes:
Confusing 0.1 with 10
Expecting decimal output when function returns INT
Assuming error due to type mismatch
4. You wrote this procedure to update a user's email:
CREATE PROCEDURE updateEmail(userId INT, newEmail VARCHAR(100)) BEGIN UPDATE users SET email = newEmail WHERE id = userId; END;
When you try to call it with SELECT updateEmail(1, 'test@example.com');, you get an error. What is the problem?
medium
A. Procedures cannot be called inside SELECT statements.
B. The procedure is missing a RETURN statement.
C. The UPDATE statement syntax is incorrect.
D. The procedure parameters must be declared as OUT.
Solution
Step 1: Understand procedure usage
Procedures perform actions but do not return values and cannot be called inside SELECT queries.
Step 2: Identify error cause
Calling a procedure with SELECT causes error because procedures are invoked with CALL, not SELECT.
Final Answer:
Procedures cannot be called inside SELECT statements. -> Option A
Quick Check:
Use CALL for procedures, not SELECT [OK]
Hint: Call procedures with CALL, not SELECT [OK]
Common Mistakes:
Trying to use SELECT to call procedures
Expecting procedures to return values
Misunderstanding parameter directions
5. You need to create a reusable SQL routine that calculates the discount price and also logs the discount application in a table. Which approach is best?
hard
A. Use a single function to calculate discount and log the discount inside it.
B. Use a function to calculate discount and a procedure to log the discount.
C. Use a procedure to calculate discount and return the discounted price.
D. Use a procedure only to calculate discount and log the discount.
Solution
Step 1: Separate calculation and action
Functions should be used for calculations returning values; procedures for actions like logging.
Step 2: Apply best practice
Use a function to return the discount price, and a procedure to perform the logging task separately.
Final Answer:
Use a function to calculate discount and a procedure to log the discount. -> Option B