Sql 将起始序列值设置为最大值(id)

Sql 将起始序列值设置为最大值(id),sql,oracle,Sql,Oracle,我需要在OracleDB中更改sequnce名称,但我不能使用rename(不需要执行epxlain)。我正在尝试删除它并创建一个具有不同名称的新的。但我需要将序列值设置为max(id)+1。我正在尝试以下命令: CREATE SEQUENCE seq_test START WITH ( SELECT MAX(id) FROM test_table ) INCREMENT BY 1 MINVALUE 100000 MAXVALUE 9223372036854775807 NOCACHE;

我需要在OracleDB中更改sequnce名称,但我不能使用rename(不需要执行epxlain)。我正在尝试删除它并创建一个具有不同名称的新的。但我需要将序列值设置为max(id)+1。我正在尝试以下命令:

CREATE SEQUENCE seq_test START WITH
  ( SELECT MAX(id) FROM test_table
  )
INCREMENT BY 1 MINVALUE 100000 MAXVALUE 9223372036854775807 NOCACHE;



CREATE SEQUENCE seq_test START WITH
  to_number( SELECT MAX(id) FROM test_table
)
INCREMENT BY 1 MINVALUE 100000 MAXVALUE 9223372036854775807 NOCACHE;
对于这两种情况,我都感到满意 SQL错误:ORA-01722:无效数字

您需要动态SQL

DECLARE
   seq_id   INTEGER;
BEGIN
   SELECT MAX (id) INTO seq_id FROM test_table;

   EXECUTE IMMEDIATE
         'CREATE SEQUENCE seq_test 
                               START WITH '
      || seq_id
      || ' INCREMENT BY 1 MINVALUE 100000 MAXVALUE 9223372036854775807 NOCACHE';
END;
/

9223372036854775807
似乎是一个非常具体的最大值。另外,
nocache
通常不是一个好主意-您确定要禁用缓存吗?如果频繁使用序列,会影响性能。这不是我的事,我必须保持原样。关于
nocache
,我经常看到不知道它做什么的人从其他脚本复制粘贴它,因此我想再次检查它是否真的需要。对于其他值,只指定非默认值更为明确,例如,
create sequence seq_test start with xxx minvalue yyy