GBase 8s
运维管理
文章

获取序列下一个值的存储过程

GBase社区管理员
发表于2024-01-30 16:38:5649次浏览0个评论

获取序列下一个值的存储过程

在明确序列名称的情况下,我们通常使用 SEQNAME.NEXTVAL的方式获取序列的下一个值。如果序列名称不明确,或者是个变量,那么我们就需要通过存储过程或者函数的方式获取。
因为序列是变量,所以我们需要使用动态SQL或者游标的方式,以下为使用游标的方式:

DROP FUNCTION IF EXISTS get_seq_next(nvarchar);
CREATE FUNCTION get_seq_next(p_seqname nvarchar(128))
RETURNS int8 AS seqval;
  define v_seqval int8;
  define v_sqlstr varchar(255);
  ON EXCEPTION
    RETURN 0;
  END EXCEPTION;
  let v_sqlstr = 'select ' || p_seqname || '.nextval from dual';
  PREPARE stmt FROM v_sqlstr;
  DECLARE cur CURSOR FOR stmt;
  OPEN cur;
  FETCH cur INTO v_seqval;
  CLOSE cur;
  FREE cur;
  FREE stmt;
  RETURN v_seqval;
END FUNCTION;

获取指定序列的下一个值的使用方法:

-- 序列名称为 seq1
select get_seq_next('seq1') from dual;

-- 或者
call get_seq_next('seq1');

评论

登录后才可以发表评论