Functions that return RECORD type

Started by Craig Brydenabout 21 years ago2 messagesgeneral
Jump to latest
#1Craig Bryden
postgresql@bryden.co.za

Hi

I come from a MS-SQL background and am trying to figure out what is wrong
with the function below:
****************************************************************************
*************
CREATE OR REPLACE FUNCTION GetAccountInfo (p_AccID int)
RETURNS record
AS
$$
DECLARE
r_Return record;
BEGIN
SELECT a.Field1, a.Field2, a.Field4
INTO r_Return
FROM Account
WHERE a.AccID = p_AccID;

RETURN r_Return;
END;
$$
language 'plpgsql';
****************************************************************************
*************
When I run select * from GetAccountInfo (100) I get the following
error message: ERROR: a column definition list is required for functions
returning "record"

please can someone explain to me how to create a column definition list.

Thanks

#2Richard Huxton
dev@archonet.com
In reply to: Craig Bryden (#1)
Re: Functions that return RECORD type

Craig Bryden wrote:

When I run select * from GetAccountInfo (100) I get the following
error message: ERROR: a column definition list is required for functions
returning "record"

please can someone explain to me how to create a column definition list.

CREATE FUNCTION foo() RETURNS SETOF RECORD AS
'SELECT 1::int,2::int,''A''::text;'
LANGUAGE sql;

SELECT * FROM foo() AS (a int, b int, c text);
a | b | c
---+---+---
1 | 2 | A
(1 row)

The other way (which I prefer) is to define a type and change the
function definition:

CREATE TYPE foo_res_type AS (a int, b int, c text);
CREATE FUNCTION foo() RETURNS SETOF foo_res_type ...

--
Richard Huxton
Archonet Ltd