plpgsql函数为基于行的租赁创建序列?

时间:2016-02-19 12:08:05

标签: postgresql plpgsql

如果不存在,尝试创建一个查找具有特定名称的序列的函数应该创建它。然后返回序列的函数值。似乎不起作用的部分功能是测试序列是否已存在的位置。以下是功能代码

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;

1 个答案:

答案 0 :(得分:0)

问题是a_horse_with_no_name

提到的情况

更改了行将vSeqName分配给以下

vSeqName :=  lower('t' || trim(to_char(vtenantid,'0000')) || vtablename);

现在功能按预期工作。