我想创建一个函数,根据表名返回主键的下一个值:
CREATE OR REPLACE FUNCTION next_pk (_table varchar) RETURNS INTEGER AS $$
BEGIN
RETURN EXECUTE 'SELECT COALESCE (MAX (primary_key), 0) + 1 FROM ' || quote_ident (_table) || ' limit 1';
END;
$$ LANGUAGE plpgsql;
select next_pk ('myTable');
但它会出现以下错误:
ERROR: type "execute" does not exist
LINE 1: SELECT EXECUTE 'SELECT COALESCE (MAX (primary_key), 0) + 1 F...
任何线索?感谢。
答案 0 :(得分:1)
你需要整数变量和'执行':
CREATE OR REPLACE FUNCTION next_pk (_table varchar) RETURNS INTEGER AS $$
DECLARE
result integer;
BEGIN
EXECUTE
'SELECT COALESCE (MAX (primary_key), 0) + 1 FROM ' || quote_ident (_table)
INTO result;
RETURN result;
END;
$$ LANGUAGE plpgsql;
select next_pk ('myTable');