From: | Pascal Polleunus <ppo(at)beeznest(dot)net> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: function returning a record |
Date: | 2004-02-17 11:39:06 |
Message-ID: | 4031FD5A.6080006@beeznest.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Ok, I found the solution :-D
In the function test(), instead of:
SELECT INTO r get_id(''mytable'');
The following must be done:
SELECT INTO r * FROM get_id(''mytable'') AS (id INT, name VARCHAR(50));
/!\ the datatypes must be EXACTLY the same.
For example, specifying CHARACTER VARYING or even VARCHAR(51) instead of
VARCHAR(50) will lead to the following error:
ERROR: query-specified return row and actual function return row do not
match
I hope it will at least help some one...
Pascal
> Hi,
>
> I'm trying to return a RECORD from a function, but when I try to use the
> variable I have the following error:
> ERROR: record "r" has no field "id"
>
>
> Here's an example:
>
> CREATE OR REPLACE FUNCTION test()
> RETURNS CHARACTER VARYING AS '
> DECLARE r RECORD;
> BEGIN
> SELECT INTO r get_id(''mytable'');
> RETURN r.id::TEXT || '' : '' || r.name;
> END;' LANGUAGE 'plpgsql';
>
>
> CREATE OR REPLACE FUNCTION get_id(CHARACTER VARYING)
> RETURNS RECORD AS '
> DECLARE
> mytable ALIAS FOR $1;
> r RECORD;
> BEGIN
> FOR r IN EXECUTE
> ''SELECT id, name FROM '' || mytable || '' WHERE id = 1''
> LOOP
> RAISE NOTICE ''r: %, %'', r.id, r.name;
> RETURN r;
> END LOOP;
>
> RETURN NULL;
> END;' LANGUAGE 'plpgsql';
>
>
> test=> select test();
> NOTICE: r: 1, ttt
> CONTEXT: PL/pgSQL function "test" line 3 at select into variables
> ERROR: record "r" has no field "id"
> CONTEXT: PL/pgSQL function "test" line 5 at return
>
>
> Any idea welcomed ;-)
>
>
> Thanks,
> Pascal
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
> (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)
From | Date | Subject | |
---|---|---|---|
Next Message | pativo | 2004-02-17 11:46:53 | String manipulation |
Previous Message | Oleg Bartunov | 2004-02-17 11:15:57 | Re: making tsearch2 dictionaries |