【问题标题】:Set starting sequence values as max(id)将起始序列值设置为 max(id)
【发布时间】:2018-02-07 17:25:20
【问题描述】:

我需要更改 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;

对于这两种情况,我都得到了 SQL 错误:ORA-01722:无效号码

【问题讨论】:

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

标签: sql oracle


【解决方案1】:

你需要动态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;
/

【讨论】:

    猜你喜欢
    • 2018-06-17
    • 2018-11-16
    • 2017-03-28
    • 2018-04-29
    • 2011-08-29
    • 1970-01-01
    • 2016-12-03
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多