PL - PGSQL Function Returns A Table
PL - PGSQL Function Returns A Table
Donate Now
(https://www.postgresqltutorial.com/donation/)
To define a function that returns a table, you use the following form of the create function
(https://www.postgresqltutorial.com/postgresql-create-function/) statement:
parameter_list
language plpgsql
as $$
declare
-- variable declaration
begin
-- body
end; $$
https://www.postgresqltutorial.com/plpgsql-function-returns-a-table/ 1/6
7/8/2021 PL/pgSQL Function Returns A Table
Instead of returning a single value, this syntax allows you to return a table with a specified column list:
We will use the film table from the sample database (https://www.postgresqltutorial.com/postgresql-sample-
database/) for the demonstration:
The following function returns all films whose titles match a particular pattern using ILIKE operator
(https://www.postgresqltutorial.com/postgresql-like/) .
p_pattern varchar
returns table (
film_title varchar,
film_release_year int
language plpgsql
as $$
begin
return query
select
https://www.postgresqltutorial.com/plpgsql-function-returns-a-table/ 2/6
7/8/2021 PL/pgSQL Function Returns A Table
title,
release_year::integer
from
film
where
end;$$
This get_film(varchar) accepts one parameter p_pattern which is a pattern that you want
to match with the film title.
The function returns a query that is the result of a select statement. Note that the columns in the result
set must be the same as the columns in the table defined after the returns table clause.
Output:
If you call the function using the following statement, PostgreSQL returns a table that consists of one
column that holds an array of rows:
https://www.postgresqltutorial.com/plpgsql-function-returns-a-table/ 3/6
7/8/2021 PL/pgSQL Function Returns A Table
Output:
In practice, you often process each individual row before appending it in the function’s result set:
p_pattern varchar,
p_year int
returns table (
film_title varchar,
film_release_year int
language plpgsql
as $$
declare
var_r record;
begin
from film
https://www.postgresqltutorial.com/plpgsql-function-returns-a-table/ 4/6
7/8/2021 PL/pgSQL Function Returns A Table
release_year = p_year
film_release_year := var_r.release_year;
return next;
end loop;
end; $$
In the function body, we used a for loop staetment to process the query row by row.
The return next statement adds a row to the returned table of the function.
https://www.postgresqltutorial.com/plpgsql-function-returns-a-table/ 5/6
7/8/2021 PL/pgSQL Function Returns A Table
Summary
Use the returns table (column_list) in the create function to define a function that
returns a table (or result set).
https://www.postgresqltutorial.com/plpgsql-function-returns-a-table/ 6/6