삽입 중 고유 제약 조건 위반: 왜? (Oracle)
테이블에 새 행을 작성하려고 합니다.테이블에는 두 가지 제약 조건이 있습니다. 하나는 키 필드(DB_ID)에 있고 다른 하나는 값이 여러 필드 ENV 중 하나가 되도록 제약합니다.삽입할 때 삽입하려는 필드 중 하나로 키 필드를 포함하지 않지만 다음 오류가 발생합니다.
unique constraint (N390.PK_DB_ID) violated
오류의 원인이 되는 SQL은 다음과 같습니다.
insert into cmdb_db
(narrative_name, db_name, db_type, schema, node, env, server_id, state, path)
values
('Test Database', 'DB', 'TYPE', 'SCH', '', 'SB01', 381, 'TEST', '')
행을 수동으로 삽입한 경우 Oracle이 이미 사용 중인 DB_ID를 할당하려고 할 가능성이 있습니다.이 데이터베이스의 데이터가 프로덕션 데이터베이스에서 복원/이동되었지만, 어떻게 복원되었는지에 대한 자세한 내용은 알 수 없습니다.
무슨 생각 있어요?
아마도, 당신이 가치를 제공하지 않기 때문에.DB_ID
테이블에 트리거를 삽입하기 전에 행 레벨로 값을 채우는 열입니다.그 트리거는 시퀀스에서 값을 선택하는 것으로 추정됩니다.
데이터가 프로덕션 데이터베이스에서 이동되었기 때문에(아마도 최근에) 데이터를 복사할 때 시퀀스도 수정되지 않았을 것입니다.시퀀스가 가장 큰 값보다 훨씬 낮은 값을 생성하고 있다고 생각합니다.DB_ID
오류가 발생할 수 있습니다.
어떤 시퀀스가 사용되고 있는지 확인하기 위해 트리거를 보고 다음을 수행하여 이 의심을 확인할 수 있습니다.
SELECT <<sequence name>>.nextval
FROM dual
그리고 그것을 비교합니다.
SELECT MAX(db_id)
FROM cmdb_db
시퀀스가 데이터베이스에 이미 존재하는 값을 생성하는 경우, 시퀀스가 사용되지 않는 값을 생성할 때까지 시퀀스를 증분하거나 변경하여 다음 값을 설정할 수 있습니다.INCREMENT
매우 큰 것으로, 다음 밸브를 한 번 얻고, 설정합니다.INCREMENT
1로 되돌아갑니다.
오류가 DB에 이미 존재하는 기본 키를 복제하는 것처럼 보입니다.IDENTITY 키워드와 같은 것을 사용하여 SQL 코드를 수정하여 자체 기본 키를 구현해야 합니다.
CREATE TABLE [DB] (
[DBId] bigint NOT NULL IDENTITY,
...
CONSTRAINT [DB_PK] PRIMARY KEY ([DB] ASC),
);
기본 키 필드 DB_ID에 대한 값을 제공하지 않는 것 같습니다.기본 키인 경우 해당 열에 고유한 값을 제공해야 합니다.이를 제공하지 않는 유일한 방법은 삽입 시 시퀀스에서 파생된 값을 제공하는 데이터베이스 트리거를 만드는 것입니다.
이것이 다른 데이터베이스에서 복원된 것이고 이 새 인스턴스에 시퀀스가 있는 경우 값을 재사용하려고 할 수 있습니다.이전 데이터의 키가 1 - 1000이고 현재 시퀀스가 500이면 이미 존재하는 값을 생성하는 것입니다.이 테이블에 시퀀스가 존재하고 이 테이블을 사용하려는 경우 테이블의 값을 시퀀스의 현재 값과 조정해야 합니다.
SEQUENCE_NAME.CURRVAL을 사용하여 시퀀스의 현재 값을 확인할 수 있습니다(물론 존재하는 경우).
언급URL : https://stackoverflow.com/questions/7571245/unique-constraint-violation-during-insert-why-oracle
'programing' 카테고리의 다른 글
MongoDB는 동시 업데이트를 어떻게 처리합니까? (0) | 2023.06.24 |
---|---|
Oracle SQL Developer에서 테이블을 생성할 때 권한 부족 (0) | 2023.06.24 |
Android TextView 주변에 테두리를 두는 방법은 무엇입니까? (0) | 2023.06.19 |
ggplot2를 사용하여 R의 각 막대에 대해 gem_bar 위에 레이블을 붙이는 방법 (0) | 2023.06.19 |
문자열에 숫자만 포함되어 있는지 python에서 어떻게 확인합니까? (0) | 2023.06.19 |