oracle插入表中的主键不正确

时间:2015-03-11 15:37:25

标签: sql ruby-on-rails oracle oracle11g oracle-sqldeveloper

我对目前的情况感到非常困惑:

我的ruby on rails应用程序正在生成以下查询:

INSERT INTO“MEMBER_ROLES”(“ID”,“NAME”,“ORG_ID”)VALUES(:a1,:a2,:a3)[[“id”,55],[“name”,“test6”] ,[“org_id”,“2”]]

查询似乎有效,我可以在数据库表中看到上述记录,但“id”字段未设置为“55”而是“56”。

每次插入都会发生这种情况。插入的实际主键总是比上面的插入语句看起来多1个。

我不确定这是否与我的表格创建方式有关?

CREATE TABLE member_roles 
(
  id  NUMBER(38,0) primary key,
  name VARCHAR2(200) not NULL,
  org_id VARCHAR2(200) not NULL,
  created_at DATE default sysdate not null,
  updated_at DATE default sysdate not null
)


CREATE SEQUENCE MEMBER_ROLES_SEQ;

set define off;
CREATE OR REPLACE TRIGGER member_roles_bir 
BEFORE INSERT ON MEMBER_ROLES 
FOR EACH ROW

BEGIN
  SELECT MEMBER_ROLES_SEQ.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;

1 个答案:

答案 0 :(得分:1)

如何获得用于插入的ID?你从序列中得到它吗? 触发器将使用下一个序列值覆盖您的id。

你可以尝试插入id = -99,你会发现它也会被覆盖......