マークされた行でいくつかの作業を行うために、テーブル内のトークンを更新するためにオラクルでクエリを実行しています。
私の問題は、毎回更新される行数を特定のバッチサイズと結果によるグループに制限したいということです。
抽象的な言葉で説明するのはちょっと難しいので、具体化します。
次のフィールドを持つ「ステージング」というテーブルがあるとします: (Id、IdFile Grouping、Name、Address1、Address2、Address3、Country、Token)
私がやろうとしているのは、この情報でバッチを実行するためのクエリを作成することです。
バッチごとにトークンを更新して、それらのレコードが後で機能するようにマークします。ファイルごとにバッチが必要で、各バッチにはサイズ制限があるため、rownum を使用して制限しています。私が持っているもう1つの制限は、バッチによるグループ化です。
バッチ サイズが 5 で、グループ化列が 3 行しかない場合、その 3 行だけでバッチを作成する必要があります。
これは、グループ化を行っているときに、グループ化の有無にかかわらず 1 つのバッチ結果しか得られないため、私の最大の不満です。(グループ化した場合、宛先アドレスがすべての行で同じかどうかを確認し、それを使用してバッチを作成する必要がありました。)
このクエリを作成する方法を理解するのを手伝ってもらえますか?
私が今使っているのは:
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 )
次のデータの場合:
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
私は6つのバッチを期待しています。
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
すっごく...誰かアイデアはありますか?
乾杯