Sql Oracle使用复合键插入表
我有一个表TBL_1,包含以下字段:Sql Oracle使用复合键插入表,sql,oracle,insert,oracle12c,Sql,Oracle,Insert,Oracle12c,我有一个表TBL_1,包含以下字段: TBL_ID NUMBER (pk), CREATE_DATE DATE (pk), TBL_IND VARCHAR2(1) 主键位于TBL_ID和CREATE_DATE上,我试图执行insert语句,但收到错误ORA-00001:违反了唯一约束主键 有一个插入前触发器将NEW.CREATE_DATE设置为SYSDATE。insert语句如下所示: INSERT INTO TBL_1 (tbl_id,tbl_ind) SELECT tbl_id,'
TBL_ID NUMBER (pk),
CREATE_DATE DATE (pk),
TBL_IND VARCHAR2(1)
主键位于TBL_ID和CREATE_DATE上,我试图执行insert语句,但收到错误ORA-00001:违反了唯一约束主键
有一个插入前触发器将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,触发器是否可能对两行使用相同的确切日期,从而导致重复错误?如何避免这种情况?我认为将create\u date作为主键的一部分不是一个好主意。我建议您改用序列值 如果不介意减少行数,可以执行以下操作:
INSERT INTO TBL_1 (tbl_id,tbl_ind)
SELECT DISTINCT tbl_id, 'Y'
FROM tbl_info;
或者,如果仍然希望插入所有行,则重新构造数据以使用序列而不是创建日期