2012-08-27 2 views
0

2 개의 컬럼 (CAGE, HCC)이 허용 된 테이블이 있습니다. 내 프로 시저에서 중복 레코드를 표시하려면이 같은 쓴.컬럼 값이 null 일 수있는 중복 레코드 삭제

FOR REC IN (SELECT LOCATION, NIIN, INVL_DATE, CAGE, 
      HCC,SUM(CA_QTY) AS SUM_CA,SUM(COST_QTY) AS SUM_COST,COUNT(*) FROM INVENTORY 
      GROUP BY LOCATION, NIIN, INVL_DATE, 
      CAGE, HCC 
      HAVING COUNT(*)>1) 
LOOP 
    VAR_LOC_NAME := REC.LOCATION; 
    VAR_NIIN  := REC.NIIN; 
    VAR_DATE  := REC.INVL_DATE; 
    VAR_CAGE  := REC.CAGE; 
    VAR_HCC   := REC.HCC; 
    VAR_CA_QTY  := REC.SUM_CA; 
    VAR_COST_QTY := REC.SUM_COST; 

FOR REC1 IN (SELECT SNO FROM INVENTORY WHERE LOCATION=VAR_LOC_NAME AND 
       NIIN=VAR_NIIN AND TUNC(INVL_DATE)=TRUNC(TO_DATE(VAR_DATE,'DD-MM-YY')) AND 
       CAGE=VAR_CAGE AND HCC=VAR_HCC) 
    LOOP 
     DBMS_OUTPUT.PUT_LINE('GET NUMBER '||REC1.SNO); 
    END LOOP; 
    end loop; 

그러나 CAGE 및 HCC의 null 값에 대해서는 작동하지 않습니다. 참고 : 당신은, 그 CAGEHCC 열 사용하지 않는 몇 가지 가치를 발견하고 오라클의 NVL 기능을 사용하여이 고유 한 값으로 NULL 값을 교체해야 내가 오라클 11g

+0

NULL 대신 사용할 수있는 값이 있습니까 ('CAGE' 또는'HCC'에 행이 ​​들어 있지 않은 값을 의미합니까)? –

답변

0

을 사용하고 있습니다. 따라서 :

FOR REC IN (SELECT LOCATION, NIIN, INVL_DATE, NVL(CAGE,-1) as CAGE, 
      NVL(HCC,-1) as HCC,SUM(CA_QTY) AS SUM_CA,SUM(COST_QTY) AS SUM_COST,COUNT(*) FROM INVENTORY 
      GROUP BY LOCATION, NIIN, INVL_DATE, 
      NVL(CAGE,-1), NVL(HCC,-1) 
      HAVING COUNT(*)>1) 

물론 -1은 여기에 불과합니다. 두 번째 루프에 관해서는

: 출력에

FOR REC1 IN (SELECT SNO FROM INVENTORY WHERE LOCATION=VAR_LOC_NAME AND 
      NIIN=VAR_NIIN AND TUNC(INVL_DATE)=TRUNC(TO_DATE(VAR_DATE,'DD-MM-YY')) AND 
      NVL(CAGE,-1)=VAR_CAGE AND NVL(HCC,-1)=VAR_HCC) 

당신이 NULL로 다시 -1을 대체 할 수 있습니다.

+0

두 번째 루프에 대해 – mallikarjun

+0

죄송합니다, 잊어 버렸습니다 :] –

+0

감사합니다. 나는 적절한 가치로 -1을 대체했다. – mallikarjun