Re: Function returning SETOF - Mailing list pgsql-general
From | David Fetter |
---|---|
Subject | Re: Function returning SETOF |
Date | |
Msg-id | 20051202033148.GA12154@fetter.org Whole thread Raw |
In response to | Function returning SETOF (Terry Lee Tucker <terry@esc1.com>) |
Responses |
Re: Function returning SETOF
|
List | pgsql-general |
On Thu, Dec 01, 2005 at 12:32:02PM -0500, Terry Lee Tucker wrote: > List, > > I have a simple function: I have a simpler one :) CREATE OR REPLACE FUNCTION split_to_rows(TEXT, TEXT) /* Descriptive name */ RETURNS SETOF TEXT STRICT LANGUAGE sql AS $$ SELECT (string_to_array($1, $2))[s.i] FROM generate_series( 1, array_upper(string_to_array($1, $2), 1) ) AS s(i); $$; Cheers, D > CREATE OR REPLACE FUNCTION parse_string (TEXT, TEXT) RETURNS SETOF TEXT AS ' > DECLARE > str ALIAS FOR $1; -- the string to parse > delimiter ALIAS FOR $2; -- the delimiter > field TEXT; -- return value from split_part > idx INTEGER DEFAULT 1; -- field counter > funcName TEXT DEFAULT ''parse_string''; -- function name > dbg BOOLEAN DEFAULT True; -- debug print flag > BEGIN > IF dbg THEN > RAISE NOTICE ''% ()'', funcName; > END IF; > SELECT INTO field split_part (str, delimiter, idx); > WHILE field != '''' LOOP > RETURN NEXT field; > idx = idx + 1; > SELECT INTO field split_part (str, delimiter, idx); > END LOOP; > RETURN; > END; > ' LANGUAGE 'plpgsql'; > > As you can see, I'm using split_part to parse the string in a loop. I want > this thing to return the set of values that make up the fields in the string. > When I call the function from psql here is the error I'm getting: > rnd=# select parse_string ('1/2/3/4/5', '/'); > NOTICE: parse_string () > ERROR: set-valued function called in context that cannot accept a set > CONTEXT: PL/pgSQL function "parse_string" line 14 at return next > > Then I tried this approach and got the same error: > rnd=# select ARRAY(SELECT parse_string ('1/2/3/4/5', '/')); > NOTICE: parse_string () > ERROR: set-valued function called in context that cannot accept a set > CONTEXT: PL/pgSQL function "parse_string" line 14 at return next > > Version Information: > rnd=# select version(); > version > -------------------------------------------------------------------------------------------------------------- > PostgreSQL 7.4.6 on i686-redhat-linux-gnu, compiled by GCC gcc (GCC) 3.2.3 > 20030502 (Red Hat Linux 3.2.3-49) > > I'm sure that I'm doing something stupid. Any input would be appreciated... > > ---------------------------(end of broadcast)--------------------------- > TIP 2: Don't 'kill -9' the postmaster -- David Fetter david@fetter.org http://fetter.org/ phone: +1 415 235 3778 Remember to vote!
pgsql-general by date: