2013-07-10 2 views
0

내가 모든 형태의 인서트를 사용하여 테이블에 여러 행을 삽입하는 쿼리를 만들려고 노력하고있어이 arent 중복을 비난 실패 ORA-00001: unique constraint violated으로 오류를 수행하십시오. 그것이 나에게주는 제약 조건 오류 코드는 기본 키에 대한 것이지만 삽입하려는 값은 기본 키와 중복되지 않습니다. 어떤 도움이라도 정말로 감사 할 것입니다. 당신이 등 고정 값 val1, val2을 삽입하는 경우삽입 모두

+0

'val1','val2' 등은 고정 값입니까? –

답변

3

, 그들은 이미 테이블에 존재하는 모든 행에 대해 한 번 삽입됩니다합니다 (intofrom 모두 참조 application부터). 기존 기본 키와 충돌하는 값을 삽입하지 않고 동일한 기본 키를 여러 번 삽입하면 동일한 오류가 발생합니다.

해당 테이블이 비어 있으면 삽입 된 행이 없습니다. 하나의 행이 있다면 하나의 행이 삽입됩니다 (아마도 수동으로 키를 복제하지 않으면 올바르게 삽입 될 것입니다). 그렇지 않으면 자동으로 중복을 생성합니다. 예외를 야기한 기본 키가 없으면 이것을 실행할 때마다 테이블의 행 수가 두 배가됩니다.

당신은 실제로 삽입되는 상황을 확인하기 위해 기본 키와 더미 테이블에 그것을 시도 할 수 있습니다 : 각 into 절은 각 행에 대해 하나 개의 새로운 행을 만든 볼 수 있도록 ...

create table t42(col1 number, col2 varchar2(10)); 

insert into t42 values (1, 'A'); 
insert into t42 values (2, 'B'); 
insert into t42 values (3, 'C'); 

insert all 
into t42 (col1, col2) values (4, 'D') 
into t42 (col1, col2) values (5, 'E') 
select * from t42; 

6 rows inserted. 

select * from t42; 

     COL1 COL2  
---------- ---------- 
     1 A   
     2 B   
     3 C   
     4 D   
     4 D   
     4 D   
     5 E   
     5 E   
     5 E   

9 rows selected 

을 그 미리 tablle에 존재했다. 분명히 col1에 PK가 있다면 새 값의 중복을 삽입했을 것입니다. 당신이 다른 행, 예에 따라 행을 만드는 경우

내가 같은 테이블을 참조 할 것 생각할 수있는 유일한 시간이다 (매우 인위적인) :

insert all 
into application (col1, col2, ...) 
values (col1 + 100, col2 || ' adjusted', ...) 
select col1, col2 from application; 

당신이 값 공급 세트 당 당신에게 하나의 행을 줄 것이다 대신 이중에서 선택할 수있는 고정 된 값에 넣어하려면 :

insert all 
into application (col1, col2, ...) 
values (val1, val2, ...) 
select * from dual; 

demp 반복 위 : 물론

create table t42(col1 number, col2 varchar2(10)); 

insert into t42 values (1, 'A'); 
insert into t42 values (2, 'B'); 
insert into t42 values (3, 'C'); 

insert all 
into t42 (col1, col2) values (4, 'D') 
into t42 (col1, col2) values (5, 'E') 
select * from dual; 

2 rows inserted. 

select * from t42; 

     COL1 COL2  
---------- ---------- 
     1 A   
     2 B   
     3 C   
     4 D   
     5 E   

5 rows selected 

많은 여러 into 절을하지 않는 한이의 insert all 구문을 사용하여 점, 그리고 심지어는 다음 individua이 없다 l insert 진술이 더 명확해질 수 있습니다.

+0

정말 고마워요, 하단의 select 절이었습니다. 이중으로 변경하면 문제가 해결되었습니다. –

관련 문제