我有一个查询,可以在系统的不同部分中使用。现在,我想制作一个函数,其中它接受要用作查询的文本, 我什至不确定这是否可行。但是,我想知道是否有可能的解决方法。
我想要实现的是一个返回表并接受可用作查询的文本/ varchar的函数。
这就是我所拥有的,我有一个查询,它是一种“基础查询”,可以基于给定的CTE命名为不同的数据:
data_table
请参阅下面的函数及其用法-这主要是抽象的,但imo这就足够了。
CREATE OR REPLACE FUNCTION func(
data_query TEXT
)
RETURNS TABLE
(
id BIGINT,
random_text varchar
)
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY
with data_table AS (
data_query
), another_data_table AS (
SELECT
*
FROM my_data
)
SELECT
d.id,
ad.random_text
FROM data_table d
INNER JOIN another_data_table ad
ON ad.ref_id = d.id;
END; $function$;
用法:
SELECT * FROM func('SELECT * FROM my_data_table');
SELECT * FROM func('SELECT * FROM my_second_data_table');
答案 0 :(得分:1)
除了传递查询外,您还可以传递表名并使用class MockClass : public BaseClass
{
public:
MockClass();
MOCK_CONST_METHOD1(methodA, void(const typeA a));
MOCK_CONST_METHOD1(methodB, void(int b));
MOCK_CONST_METHOD3(methodC, bool(double c, double d, int e));
};
EXECUTE format
用法:
CREATE OR REPLACE FUNCTION func(
table_name_in TEXT
)
RETURNS TABLE
(
id BIGINT,
random_text varchar
)
LANGUAGE plpgsql
AS $function$
BEGIN
RETURN QUERY EXECUTE format (
'SELECT
d.id :: bigint,
ad.random_text :: varchar
FROM %I d
INNER JOIN my_data ad
ON ad.ref_id = d.id', table_name_in );
END
$function$;