我写了一个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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top