【问题标题】:ORACLE APEX / SQL DEVELOPER: Cannot get PK to autoincrementORACLE APEX / SQL DEVELOPER:无法使 PK 自动递增
【发布时间】:2020-07-22 18:20:35
【问题描述】:

我正在尝试将我的 SQLDeveloper DB 实施到 Oracle APEX 中。我无法弄清楚如何让表中的 PK 从某个值(即 400001)开始自动递增。我尝试过制作触发器和序列,但是当我尝试在 APEX 中使用表单添加一行时,我的 PK 由于某种原因从 40 递增。

这是我的 APEX 表单结果 enter image description here

这是它如何插入 SQL Developer enter image description here

基本上,有人可以向我描述如何编辑现有触发器或创建一个序列,这将使新条目的 application_id 自动递增 1。

谢谢!

【问题讨论】:

  • 向我们展示您的序列并触发 DDL
  • oracle DB 版本?如果 12 或更高,您根本不需要序列或触发器,只需在 PK 列定义中使用 IDENTITY 子句 - 与您的序列类似的语法

标签: oracle oracle-sqldeveloper oracle-apex


【解决方案1】:

查找最大值application_id

select max(application_id) From your_Table;

假设它是400010(如屏幕截图所示)。现在重新创建序列(假设它的名字是seq_app):

drop sequence seq_app;
create sequence seq_app start with 400011 increment by 1 nocache;

触发器很可能没问题,因为您看到值被插入到表中。

旁注:序列将是唯一的,但不一定是无间隙的。 CACHE(或NOCACHE)可能会影响这一点,但是 - 出于性能考虑,您宁愿让 Oracle 缓存序列号(默认为 20),这意味着 - 如果您不使用其中一些缓存的数字,它们会迷路。如果我是你,我就不会担心。

【讨论】:

  • 可以在不删除序列的情况下做到这一点grassroots-oracle.com/2013/03/…
  • 对;需要更多输入 (alter + select + alter),但是是的,这是可能的。
  • 这就是我构建程序的原因 - 但您可以保留您的权限,并且不会破坏任何程序单元。
猜你喜欢
  • 1970-01-01
  • 2012-01-13
  • 2013-11-13
  • 2012-06-14
  • 2013-12-01
  • 1970-01-01
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多