Oracle 使用复合键插入 table

Oracle inserting into table with composite key

我有一个 table、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 INTO TBL_1 (tbl_id,tbl_ind)
  SELECT tbl_id,'Y' 
    FROM tbl_info;

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

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

如果你不介意减少行数,你可以这样做:

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

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