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_ID
和 CREATE_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;
或者,如果您仍希望插入所有行,则重组数据以使用序列而不是创建日期。
我有一个 table、TBL_1
,具有以下字段:
TBL_ID NUMBER (pk),
CREATE_DATE DATE (pk),
TBL_IND VARCHAR2(1)
主键在 TBL_ID
和 CREATE_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;
或者,如果您仍希望插入所有行,则重组数据以使用序列而不是创建日期。