我有这个功能:
CREATE OR REPLACE FUNCTION remote (_table_name text)
RETURNS SETOF my_table AS
$func$
DECLARE
sql text := format('SELECT * FROM %s WHERE id = 1', _table_name);
BEGIN
RETURN QUERY EXECUTE sql
USING _table_name;
END
$func$ LANGUAGE plpgsql;
select * from remote('my_table')
但我希望有一个动态的RETURNS SETOF _table_name
。
如果我这样做,我会收到此错误:
ERROR: type "_table_name" does not exist
我怎样才能做到这一点?
非常感谢
答案 0 :(得分:0)
在这里找到答案:Refactor a PL/pgSQL function to return the output of various SELECT queries
CREATE OR REPLACE FUNCTION get_remote(_table_name anyelement)
RETURNS SETOF anyelement AS
$func$
DECLARE
sql text := format('SELECT * FROM %s WHERE id = 1', pg_typeof(_table_name));
BEGIN
RETURN QUERY EXECUTE sql
USING _table_name;
END
$func$ LANGUAGE plpgsql;
select * from get_remote(NULL::my_table)
虽然这是一个棘手的问题......