【发布时间】:2014-09-19 11:09:36
【问题描述】:
如何创建一个新序列,其名称来自变量?
我们来看下面的例子:
CREATE OR REPLACE FUNCTION get_value(_name_part character varying)
RETURNS INTEGER AS
$BODY$
DECLARE
result bigint;
sequencename character varying(50);
BEGIN
sequencename = CONCAT('constant_part_of_name_', _name_part);
IF((SELECT CAST(COUNT(*) AS INTEGER) FROM pg_class
WHERE relname LIKE sequencename) = 0)
THEN
CREATE SEQUENCE sequencename --here is the guy this is all about
MINVALUE 6000000
INCREMENT BY 1;
END IF;
SELECT nextval(sequencename) INTO result;
RETURN result;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
现在,假设我想要一个 _name_part = 'Whatever' 的序列,所以我输入:
SELECT get_value('Whatever');
如果序列constant_part_of_name_Whatever 不存在,我的函数应该创建它并取一个值;如果它存在,它应该只取一个值。但是,我创建了序列constant_part_of_name_sequencename。
如何将变量的值放入序列定义中以使其工作?
【问题讨论】:
标签: sql postgresql sequence plpgsql dynamic-sql