Consider a problem where i have to find the second largest value in each row : I have tried to write code for that CREATE TABLE xyz(a INT, b INT, c INT); INSERT INTO xyz VALUES (3, 7, 5), (5, 6, 2), (9, 3, 6), (5, 1, 3), (2, 4, 7); CREATE TEMPORARY TABLE tb(g INT); DELIMITER // CREATE FUNCTION second_largest(x INT, y INT, z INT) RETURNS INT BEGIN DECLARE ans INT; INSERT INTO tb VALUES (x), (y), (z); SET ans = (SELECT g FROM tb ORDER BY g DESC LIMIT 1, 1 ); DELETE FROM tb; RETURN ans; END // DELIMITER ; SELECT second_largest(a, b, c) FROM xyz; SELECT second_largest(4, 1, 8); The function is working ok ... I just need to know if the way i have used the temporary table inside the function is ok or not