【问题标题】:inserting value without auto increment primary key in oracle在oracle中插入没有自动递增主键的值
【发布时间】:2019-01-09 02:09:11
【问题描述】:

我有一个表,它有一个 id 列但没有主键。他们都手动添加了 id。所以我想要做的是向该表插入一些值,但它需要 id。如何在添加 id 列特定值的同时插入?

【问题讨论】:

  • 我正在使用的表已经存在。我正在尝试在该表中插入值,但它希望我输入一个 id。但 id 列不是主键。在我之前他们手动插入了 id 号
  • "它要我输入一个 id" - 什么?您是否使用应用程序或工具插入,您会遇到什么错误?为什么不能像以前那样手动插入值;或者您是否尝试从手动设置更改为自动生成?

标签: oracle insert primary-key auto-increment manual


【解决方案1】:
CREATE SEQUENCE seq$table1
START WITH 10
INCREMENT BY 1
NOCACHE
NOCYCLE;

CREATE OR REPLACE TRIGGER trg$table1
BEFORE INSERT
ON table1
FOR EACH ROW   
REFERENCING NEW AS N OLD AS O
BEGIN
  select seq$table1.nextVal
  into :n.id
  from dual;
END;
/

update table1
set id = seq$table1.nextVal;
commit;

【讨论】:

    【解决方案2】:

    我可以建议一种方法,您可以在谷歌的帮助下自己编写代码,或者让我知道您是否需要代码来编辑答案: 1.创建一个序列。 2.为插入编写一个程序,该程序将检查由序列生成的id是否存在于表中。使用循环检查 id 是否存在,然后调用 sequence.next 直到您获得表中不存在的 id。

    注意:您也可以使用触发器,但这会产生变异表错误,因此如果您能处理该错误,您将获得完美的解决方案。

    如果您需要上述步骤的代码,请告诉我,但我建议您先尝试。 谢谢

    【讨论】:

      猜你喜欢
      • 2021-11-19
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多