1

I am trying to write a function, to which if I pass a variable then depending upon the value of the variable, different query should execute.

CREATE OR REPLACE FUNCTION SW_Versions(VersionType varchar)
RETURNS TABLE(array_sw_version varchar) AS $$
BEGIN

IF VersionType = 'All' THEN

    EXECUTE 'select ''1'' as array1_sw_version UNION ALL
        select ''2'' as array1_sw_version';

ELSIF VersionType = 'Major' THEN

    EXECUTE 'select ''A'' as array2_sw_version UNION ALL
        select ''B'' as array2_sw_version';

ELSE
    EXECUTE 'select ''X'' as array3_sw_version UNION ALL
        select ''Y'' as array3_sw_version';
END IF;

END;
$$ LANGUAGE plpgsql STRICT;

SELECT SW_Versions('Major')

The above query is not yielding the correct result which should be 2. Can anyone pls help me out in identifying what am I doing wrong?

2
  • How is it not working? Perhaps if you set up a SQL Fiddle, someone could help you figure out the problem. Commented Jun 9, 2015 at 18:14
  • Not sure why its not working..here is the output I am getting Imgur Commented Jun 9, 2015 at 18:20

1 Answer 1

3

You do not need EXECUTE. Use RETURN QUERY instead. Casts (::varchar) added to provide column type compability.

CREATE OR REPLACE FUNCTION SW_Versions(VersionType varchar)
RETURNS TABLE(array_sw_version varchar) AS $$
BEGIN

IF VersionType = 'All' THEN

    RETURN QUERY select '1'::varchar as array1_sw_version UNION ALL
        select '2'::varchar as array1_sw_version;

ELSIF VersionType = 'Major' THEN

    RETURN QUERY select 'A'::varchar as array2_sw_version UNION ALL
        select 'B'::varchar as array2_sw_version;

ELSE
    RETURN QUERY select 'X'::varchar as array3_sw_version UNION ALL
        select 'Y'::varchar as array3_sw_version;
END IF;

END;
$$ LANGUAGE plpgsql STRICT;

SELECT SW_Versions('Major')
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.