표시된 행에 대한 작업을 수행하기 위해 oracle에서 쿼리를 실행하여 테이블의 토큰을 업데이트하고 있습니다.그룹 기반 쿼리 결과 제한
제 문제는 매번 특정 배치 크기로 업데이트되는 행 수를 제한하고 결과별로 그룹으로 제한하려고합니다.
내가 추상적으로 설명하기는 다소 어렵습니다. 그래서 그것을 구체화 할 것입니다. (ID, IdFile 그룹화, 이름, 주소 1, 주소 2, Address3, 국가, 토큰)
가 난 할 노력하고있어 것은 만들 수 있습니다 :
내가 다음 필드가 '준비'라는 테이블을 가지고 말 이 정보로 일괄 처리하는 쿼리.
각 일괄 처리에 대해 토큰을 업데이트하여 해당 레코드가 나중에 작동하도록 표시되도록합니다. 파일별로 일괄 처리가 필요하며 각 일괄 처리에는 크기 제한이 있으므로 rownum을 사용하여 제한하고 있습니다. 다른 제한 사항은 배치별로 그룹화하는 것입니다.
내 배치 크기가 5라고 가정 해 봅시다. 그룹화 열이 3 개 3 개 밖에없는 행을 3 개만 배치로 만들어야합니다.
이것은 내가 그룹을 수행 할 때와 마찬가지로 그룹화를 사용하거나 사용하지 않고 결과를 한 번에 얻을 수있게 해준 가장 큰 애완 동물입니다. (그룹화했다면 운명 주소가 모든 행에 대해 동일한 지 확인해야하고 그 행을 사용하여 배치를 만들어야합니다.)
이 쿼리를 어떻게 작성해야하는지 이해해 주시겠습니까?
내가 지금 사용하고 있습니다 것은 다음 데이터의 경우
update schema.staging set
token = 'token4'
where id in (select t.id
from (
select stage.id, stage.grouping
from (select idFile
from (select a.idFile
from schema.staging a
inner join schema.config c on c.id = a.idcfgpriority
where nvl2(a.token,0,1) = 1
group by a.idFile, c.order
order by c.order desc) files
where rownum = 1) priorityFile
inner join schema.staging stage on stage.idFile = priorityFile.idFile
where nvl2(stage.token,0,1) = 1
group by stage.idFile, stage.token, stage.id, grouping sets ((stage.grouping),
(stage.name, stage.Address1,stage.Address2,stage.Address3,stage.Country))
order by stage.grouping
) t
where rownum <= 5)
: 나는 6 개 배치를 기다리고있을 것입니다
Id IdFile Grouping Name Address1 Address2 Address3 Country Token
====================================================================================
1 1 null Name1 Address1 Address1 Address1 Country null
2 1 1 Name1 Address1 Address1 Address1 Country null
3 1 1 Name1 Address1 Address1 Address1 Country null
4 1 1 Name1 Address1 Address1 Address1 Country null
5 1 2 Name1 Address1 Address1 Address1 Country null
6 1 2 LALAL XPTO Address1 Address1 Country null
7 1 null Name1 Address1 Address1 Address1 Country null
8 1 null Name1 Address1 Address1 Address1 Country null
9 1 null Name1 Address1 Address1 Address1 Country null
10 2 null Name1 Address1 Address1 Address1 Country null
11 2 null Name1 Address1 Address1 Address1 Country null
12 2 null Name1 Address1 Address1 Address1 Country null
13 2 null Name1 Address1 Address1 Address1 Country null
14 2 null Name1 Address1 Address1 Address1 Country null
15 2 null Name1 Address1 Address1 Address1 Country null
.
batch#1: 1, 7, 8, 9
batch#2: 2, 3, 4
batch#3: 5
batch#4: 6
batch#5: 10, 11, 12, 13, 14
batch#6: 15
sooo ... 누구에게 아이디어가 있습니까?
건배
샘플 데이터와 원하는 결과를 제공 할 수 있습니까? –
완성 해 주셔서 감사합니다. – Silva