将起始序列值设置为 max(id)

lij*_*dam 2 sql oracle

我需要在 Oracle DB 中更改序列名称,但我不能使用重命名(无需执行 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;
Run Code Online (Sandbox Code Playgroud)

对于这两种情况,我都收到 SQL Error: ORA-01722: invalid number

Kau*_*yak 5

你需要动态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;
/
Run Code Online (Sandbox Code Playgroud)