| From: | imad <immaad(at)gmail(dot)com> |
|---|---|
| To: | robins(at)pobox(dot)com |
| Cc: | Gábriel Ákos <akos(dot)gabriel(at)i-logic(dot)hu>, pgsql-sql(at)postgresql(dot)org |
| Subject: | Re: PL/PGSQL Record type question |
| Date: | 2007-05-11 18:19:52 |
| Message-ID: | 1f30b80c0705111119v7b0520ebgbda9ae7e07259bc5@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-sql |
On 5/11/07, Robins <tharakan(at)gmail(dot)com> wrote:
> Hi Gabriel,
>
> There are two ways to do this:
> 1. Imad's way (Define the function with the return type as RECORD). Its only
> problem is that while querying from this function, you need to give a proper
> SELECT query or else PG returns an error.
Yeah ... valid point.
>
> e.g. As Imad gives in his example ...
>
> CREATE FUNCTION xyz() RETURNS record AS
> $$
> declare
> abc RECORD;
> begin
> abc := (1, 2);
> return abc;
> end;
> $$
> language plpgsql;
>
> And execute the function in this fashion:
>
> select a, b from xyz() as (a int, b int);
>
> The only problem with this is that if you have 6 elements your select
> statement becomes quite long. Also, in case your function return parameter
> count changes, or its types change, you would need to change the SELECT SQL
> at all the places.
>
> 2. Define a TYPE as John mentioned, and set the function's return type as
> this TYPE. The advantage is that you can always redefine the function and
> the type in case the return parameters are changing and that your select
> statement is a simple SELECT * from fn().
The drawback is that you need to know the complete definition in
advance. In contrast, you can assign any type of row to a RECORD
variable ... much more flexible.
--Imad
www.EnterpriseDB.com
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Collin Peters | 2007-05-11 20:18:02 | Re: Convert serial column to regular integer |
| Previous Message | Robins | 2007-05-11 17:39:08 | Re: PL/PGSQL Record type question |