PostgreSQL - 如何在函数和返回表中动态执行查询

时间:2015-06-09 17:44:50

标签: sql postgresql plpgsql

我正在尝试编写一个函数,如果我传递一个变量,然后根据变量的值,应该执行不同的查询。

Caused by: java.lang.ClassNotFoundException: the name of project  A 
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 3 more

上述查询未产生正确的结果,该结果应为2。 任何人都可以帮我确定我做错了什么?

1 个答案:

答案 0 :(得分:3)

您不需要EXECUTE。请改用RETURN QUERY。添加了强制转换(::varchar)以提供列类型兼容性。

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')