如果不存在,尝试创建一个查找具有特定名称的序列的函数应该创建它。然后返回序列的函数值。似乎不起作用的部分功能是测试序列是否已存在的位置。以下是功能代码
CREATE OR REPLACE FUNCTION public."tenantSequence"(
vtenantid integer,
vtablename character)
RETURNS bigint AS
$BODY$DECLARE
vSeqName character varying;
vSQL character varying;
BEGIN
select ('t' || trim(to_char(vtenantid,'0000')) || vtablename) INTO vSeqName;
if not exists(SELECT 0 FROM pg_class where relkind = 'S' and relname = vSeqName )
then
vSQL := 'create sequence '||vSeqName||';';
execute vSQL;
ELSE
return 0;
end if;
return nextval(vSeqName) * 10000 + vtenantid;
END$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public."tenantSequence"(integer, character)
OWNER TO postgres;
答案 0 :(得分:0)
问题是a_horse_with_no_name
提到的情况更改了行将vSeqName分配给以下
vSeqName := lower('t' || trim(to_char(vtenantid,'0000')) || vtablename);
现在功能按预期工作。