我有一个函数:tickets(date, date)
。我需要创建一个使用函数名称和函数参数的函数dw.process(_tbl regclass, start date, stop date)
,以便在运行SELECT * FROM dw.process('tickets', '2019-04-01' , '2019-04-01' );
时最终运行SELECT id FROM tickets('2019-04-01' , '2019-04-01' );
这是我尝试过的
CREATE OR REPLACE FUNCTION dw.process(_tbl regclass, start date, stop date)
RETURNS TABLE(id bigint) AS
$func$
DECLARE
soccer INTEGER := 3;
BEGIN
RETURN QUERY
EXECUTE 'SELECT id FROM ' || _tbl
|| '('' || start || '','' | | stop '')' || ' WHERE ' || _tbl || '.game_id = ' || soccer ;
END
$func$ LANGUAGE plpgsql;
但是运行SELECT * FROM dw.process('tickets', '2019-04-01' , '2019-04-01' );
如果存在,则返回relation "tickets" does not exist
。
是否将一个函数和该函数的参数传递给在psql中可行的另一个函数?
答案 0 :(得分:0)
regclass
类型涉及关系(即表,视图,索引,序列或组合类型)。函数的适当类型为regproc
,有关Object Identifier Types.的更多信息
另外,请阅读关于the function format()
的知识,该知识在各种情况下都非常方便,尤其是在动态命令中。示例:
create or replace function dw.process(func regproc, start date, stop date)
returns table(id bigint) language plpgsql as $func$
declare
soccer integer = 3;
begin
return query execute format(
'select id from %I(%L, %L) where game_id = %s',
func, start, stop, soccer);
end $func$;