Oracle使用复合键插入表中

时间:2017-05-25 18:35:17

标签: sql oracle insert oracle12c

我有一张表TBL_1,其中包含以下字段:

TBL_ID NUMBER (pk),
CREATE_DATE DATE (pk),
TBL_IND VARCHAR2(1)

主键位于TBL_IDCREATE_DATE,我正在尝试执行插入语句,但收到错误ORA-00001: unique constraint (primary key) violated

有一个插入触发器,将NEW.CREATE_DATE设置为SYSDATE。 insert语句如下所示:

  INSERT INTO TBL_1 (tbl_id,tbl_ind)
  SELECT tbl_id,'Y' 
    FROM tbl_info;

实际查询稍微复杂一些,但我只想指出它是INSERT INTO SELECT语句。是否有可能重复tbl_id触发器对两行使用相同的确切日期,从而导致重复错误?我怎么能避免这个?

1 个答案:

答案 0 :(得分:1)

我认为将create_date作为主键的一部分并不是一个好主意。我建议您使用序列值。

如果您不介意减少行数,可以执行以下操作:

INSERT INTO TBL_1 (tbl_id,tbl_ind)
    SELECT DISTINCT tbl_id, 'Y' 
    FROM tbl_info;

或者,如果您仍希望插入所有行,则重新构建数据以使用序列而不是创建日期。