Returning multiple values from a function
От | Keith Worthington |
---|---|
Тема | Returning multiple values from a function |
Дата | |
Msg-id | 46E6115E.1050901@NarrowPathInc.com обсуждение исходный текст |
Ответы |
Re: Returning multiple values from a function
|
Список | pgsql-novice |
Hi All, I wrote the following type and function to calculate and return two values based on a number of inputs. When I execute the function like this SELECT * FROM interface.func_cover_dimensions(120.0::FLOAT4, 40.0::FLOAT4, 0::INT2, FALSE, NULL::FLOAT4, FALSE); I get the following message. ERROR: RETURN must specify a record or row variable in function returning tuple at or near "{" SQL state: 42601 Context: compile of PL/pgSQL function "func_cover_dimensions" near line 49 I am reasonably sure that I have simply bollixed the concept of returning more than one value from a function. Can someone point out the error of my ways? Links to relevant documentation are always appreciated. -- Type: interface.func_cover_dimensions -- DROP TYPE interface.func_cover_dimensions; CREATE TYPE interface.func_cover_dimensions AS (cover_length_in float4, cover_width_in float4); ALTER TYPE interface.func_cover_dimensions OWNER TO postgres; -- Function: interface.func_cover_dimensions(float4, float4, int2, bool, float4, bool) -- DROP FUNCTION interface.func_cover_dimensions(float4, float4, int2, bool, float4, bool) CREATE OR REPLACE FUNCTION interface.func_cover_dimensions(float4, float4, int2, bool, float4, bool) RETURNS interface.func_cover_dimensions AS $BODY$ DECLARE v_length_in ALIAS FOR $1; v_width_in ALIAS FOR $2; v_box_quantity ALIAS FOR $3; v_floating_box ALIAS FOR $4; v_box_length_in ALIAS FOR $5; v_catwalk ALIAS FOR $6; v_quantity FLOAT4; v_bar_length_in FLOAT4; v_bar_width_in FLOAT4; v_cover_length FLOAT4; v_cover_width FLOAT4; BEGIN -- If width is greater than length reverse their values. IF v_width_in > v_length_in THEN v_bar_width_in := v_length_in; v_bar_length_in := v_width_in; ELSE v_bar_width_in := v_width_in; v_bar_length_in := v_length_in; END IF; IF v_floating_box THEN v_cover_length = v_bar_length_in - (0.5::FLOAT4 * v_box_length_in) ELSE -- Calculate the length and width of the cover. v_cover_length = v_bar_length_in - (v_box_quantity::FLOAT4 * v_box_length_in) END IF; -- Calculate the width of the cover. v_cover_width = v_bar_width_in - 12::FLOAT4 RETURN v_cover_length, v_cover_width}; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; -- Kind Regards, Keith
В списке pgsql-novice по дате отправления: