2011-12-02 2 views
0

고유 한 link_row 인스턴스에 대해서만 삽입이 수행되도록 다음 SQL을 어떻게 변경하는지 궁금합니다. 그래서 정확히 동일한 값이 seletc에서 되돌려 진다면 나는 단지 루프를 수행하고 처음으로 삽입하기를 원합니다.SQL - for 루프 중복 문제

BEGIN 
     FOR LINK_ROW IN (SELECT LINKTEXT, LINKURL, CORPID FROM LINKS) 
     LOOP 
      //Do insert here 

동일한 항목이 루프 내부에 두 번 삽입되기 때문에 스크립트를 실행할 때 기본 키 위반 오류가 발생합니다. 나는 당신의 쿼리의 전체 범위를 모르겠지만 거기,

BEGIN 
     FOR LINK_ROW IN (SELECT DISTINCT LINKTEXT, LINKURL, CORPID FROM LINKS) 
     LOOP 

그러나 : 사전에

덕분에

답변

5

선택 결과를 제한하려면 UNIQUE 또는 DISTINCT 키워드를 사용하십시오.

하지만 삽입을 한 문장에서 선택하는 것이 훨씬 더 좋습니다.

+0

표시하지 않은 삽입이 많을수록 FOR에 반환 된 값에 따라 다른 테이블에 삽입됩니다. 고유 한 것과 고유 한 것의 차이점은 무엇입니까 – Kaskade

+0

오라클은 상호 교환 가능하며 오라클도 동일하게 취급합니다. – Ollie

4

당신은 링크 테이블에서 유일한 고유의 레코드를 선택하는 DISTINCT 키워드를 사용할 수 있습니다 SQL에서 루프를 사용하는 것보다 태스크를 수행하는 더 좋은 방법. SQL은 선언적이며 집합과 함께 작동하도록 설계되었으므로 데이타베이스 엔진 에 무엇을하고 싶은지 하고 싶은 것을으로 지정하고 싶습니다.