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');评论
登录后才可以发表评论
热门帖子
- 12025-12-01浏览数:182763
- 22023-05-09浏览数:25057
- 42023-09-25浏览数:18525
- 52020-05-11浏览数:17529