2014-09-24 2 views
0

SELECT 쿼리에서 추출한 수정 된 데이터를 삽입하는 임시 테이블이 있습니다. 나는 그룹에 원하는이 임시 테이블에서 Oracle SQL의 테이블에 배치 번호를 삽입하십시오.

일괄로 내 행, 그래서 난 내 선택에 말

내가 달성을 기대하고 아이디어는이 (1000 개 결과를 "BATCH_NUM"라는 인덱스 INT 열을 추가 성명서).

의사 코드

Batch Size = 100 
Count = 0 
For batch size in results set 
Insert Into Temp Table (a , b , y , count) 
Count++ 

현재 SQL - select 문 1000 개 결과가있는 경우

INSERT INTO TEMP_TABLE ( ASSET_ID, PAR_PROM_INTEG_ID, IGNORE BATCH_NUM ) SELECT carelevel.row_id, pstn.PROM_INTEG_ID, CASE WHEN promoprod.fabric_cd = 'Disabled' THEN 'Y' ELSE 'N' END '1' FROM SIEBEL.S_ASSET carelevel INNER JOIN SIEBEL.S_ASSET pstn ON pstn.row_id = carelevel.par_asset_id INNER JOIN SIEBEl.S_ASSET promotion ON pstn.prom_integ_id = promotion.integration_id INNER JOIN SIEBEL.S_PROD_INT prod ON prod.row_id = carelevel.prod_id INNER JOIN SIEBEL.S_ORG_EXT bill ON carelevel.bill_accnt_id = bill.row_id INNER JOIN SIEBEL.S_INV_PROF invoice ON bill.row_id = invoice.accnt_id INNER JOIN SIEBEL.S_PROD_INT promoprod ON promotion.prod_id = promoprod.row_id WHERE prod.part_num = 'Testproduct' 

그러나

, 그때 내가 BATCH_NUM 1에서 가고 싶은 BATCH_NUM 컬럼에 하나의 입력 정적 값 , 2,3,4,5,6,7,8,9,10 기록 100 개당.

이 작업을 수행 할 수 있습니까?

+1

당신은 첫 번째 배치를 원하는 - 또는 같은 시간에 다른 배치의 일부로 다음 값을 삽입하십시오 e? (1-100 => 배치 1, 101-200 => 배치 2) –

+0

결과 집합/배치 크기에 따라 올바른 배치 번호 증가 – kaleeway

답변

3

레코드를 일괄 처리하려면 정수 나누기를 사용하기 만하면됩니다. 또는 행이 1에서부터 번호가 매겨 질 때 약간 더 복잡하지만 TRUNC((ROWNUM-1)/100)+1과 같은 것이 트릭을 수행합니다. 여기

그 매핑을위한 테스트입니다 :

select level, trunc((ROWNUM-1)/100)+1 from dual connect by level <= 1000 

결과 :

ROWNUM TRUNC((ROWNUM-1)/100)+1 
1  1 
... 
100  1 
101  2 
... 
200  2 
201  3 
... 
... 
900  9 
901  10 
... 
1000 10 

쿼리 감안할 때 :

INSERT INTO TEMP_TABLE 
(
    ASSET_ID, 
    PAR_PROM_INTEG_ID, 
    IGNORE, 
    BATCH_NUM 
) 
SELECT carelevel.row_id, pstn.PROM_INTEG_ID, 
CASE 
    WHEN promoprod.fabric_cd = 'Disabled' 
    THEN 'Y' 
    ELSE 'N' 
END, 
TRUNC((ROWNUM-1)/100)+1, 
-- ^^^^^^^^^^^^^^^^^^^^ 
-- map rows 1-100 to batch 1, rows 101-200 to batch 2 and so on 
FROM SIEBEL.S_ASSET carelevel 
INNER JOIN SIEBEL.S_ASSET pstn 
ON pstn.row_id = carelevel.par_asset_id 
INNER JOIN SIEBEl.S_ASSET promotion 
ON pstn.prom_integ_id = promotion.integration_id 
INNER JOIN SIEBEL.S_PROD_INT prod 
ON prod.row_id = carelevel.prod_id 
INNER JOIN SIEBEL.S_ORG_EXT bill 
ON carelevel.bill_accnt_id = bill.row_id 
INNER JOIN SIEBEL.S_INV_PROF invoice 
ON bill.row_id = invoice.accnt_id 
INNER JOIN SIEBEL.S_PROD_INT promoprod 
ON promotion.prod_id = promoprod.row_id 
WHERE prod.part_num = 'Testproduct' 
+0

이것은 완벽하게 감사합니다. – kaleeway

관련 문제