Creating a function in Postgresql that does not return composite values

Posted by celenius on Stack Overflow See other posts from Stack Overflow or by celenius
Published on 2012-12-10T23:02:41Z Indexed on 2012/12/10 23:03 UTC
Read the original article Hit count: 235

Filed under:
|
|

I'm learning how to write functions in Postgresql. I've defined a function called _tmp_myfunction() which takes in an id and returns a table (I also define a table object type called _tmp_mytable)

-- create object type to be returned
CREATE TYPE _tmp_mytable AS (
    id      integer, 
    cost    double precision
    );

-- create function which returns query
CREATE OR REPLACE FUNCTION _tmp_myfunction(
    id    integer
    )
RETURNS SETOF _tmp_mytable AS $$
BEGIN  
  RETURN QUERY 
  SELECT
    id,
    cost  
  FROM 
    sales
  WHERE
    id = sales.id;
  END;
$$ LANGUAGE plpgsql;

This works fine when I use one id and call it using the following approach:

SELECT * FROM _tmp_myfunction(402);

What I would like to be able to do is to call it, but to use a column of values instead of just one value. However, if I use the following approach I end up with all values of the table in one column, separated by commas:

-- call function using all values in a column
SELECT _tmp_myfunction(t.id)
FROM transactions as t;

I understand that I can get the same result if I use SELECT _tmp_myfunction(402); instead of SELECT * FROM _tmp_myfunction(402); but I don't know how to construct my query in such a way that I can separate out the results.

© Stack Overflow or respective owner

Related posts about sql

Related posts about function