圈子推荐
查看所有吧>>
活跃用户
    atlasdb 兼容oracle 特性之超长序列

    Oracle中超长序列如下:

    CREATE SEQUENCE  "XOS"."COMMON_SEQ"  MINVALUE 1200000000000000000000 MAXVALUE 1299999999999999999999 INCREMENT BY 1 START WITH 1200000000000001741019 CACHE 20 NOORDER  NOCYCLE  NOPARTITION ;


    该序列超出AtlasDB长度范围,实现方式如下:

    create table common_seq(id numeric);

    insert into common_seq values(0);


    CREATE OR REPLACE FUNCTION COMMON_SEQ_nextval()

     RETURNS numeric

     LANGUAGE plpgsql

    AS $function$

    DECLARE

        result numeric;

        current_val numeric;


    BEGIN

        select id into current_val from common_seq;

        if current_val < = 1299999999999999999999 then

            update common_seq set id = id+1 returning id into result;

            RETURN result;

        else

            raise exception 'sequence common_seq is out of range for';

        end if;

    END com_getAgeByIdCard;

    $function$

    ;


    CREATE OR REPLACE FUNCTION COMMON_SEQ_currval()

     RETURNS numeric

     LANGUAGE plpgsql

    AS $function$

    DECLARE

        result numeric;


    BEGIN

        select id into result from common_seq;

        RETURN result;

    END com_getAgeByIdCard;

    $function$

    ;


    • 分享到:
    排序方式:回复时间 共有3条评论

    cursen 发表于 2020-03-10 09:07 1 楼

    后面使用呢?

    | 回复

    刘邦艺 发表于 2020-03-10 10:22 2 楼

    原来是小于等于号会导致文章或评论被截断,注意文中写成了< =,使用时需删去多余空格。

    | 回复

    刘邦艺 发表于 2020-03-11 10:16 3 楼

    没注意,原来文章发布后,后边的一半内容被截断了,重新编辑也是如此,重新发布新文档也是如此,bug岂可修?!

    | 回复