我如何获得一个序列的MINVALUE在Oracle 10g中PL / SQL?
-
21-09-2019 - |
题
我写了一个PL / SQL脚本的序列的值设置为一个表的主键的最大值:
DECLARE
max_idn NUMERIC(18, 0);
seq_nextval NUMERIC(18, 0);
increment_amount NUMERIC(18, 0);
BEGIN
SELECT MAX(mbr_idn)
INTO max_idn
FROM mbr;
SELECT mbr_seq.nextval
INTO seq_nextval
FROM DUAL;
increment_amount := max_idn - seq_nextval;
EXECUTE IMMEDIATE
'ALTER SEQUENCE mbr_seq
increment by ' || increment_amount;
END;
然而,我得到一个错误,如果序列的MINVALUE比最大主键度:
ORA-08004:序列MBR_SEQ.NEXTVAL低于MINVALUE和不能被实例化
ORA-06512:在第10行
什么是说,最简单的方法“增加由increment_amount序列,但不要低于MINVALUE”?
解决方案
您可以查询DBA_SEQUENCES表,以获得MIN_VALUE
SELECT min_value
INTO l_min_value
FROM all_sequences
WHERE sequence_name = 'MBR_SEQ'
AND owner = <<sequence owner>>
您可以再将此主题融入你的代码,即。
increment_amount := GREATEST( max_idn, l_min_value ) - seq_nextval;
不隶属于 StackOverflow