【发布时间】:2019-11-25 12:06:08
【问题描述】:
如果在将下一个组增加 10 并且在顺序流更新之后组发生了变化。
我的逻辑是将第一行与另一行进行比较,如果第一行与另一行匹配,则时间递增 1,否则与该时间递增 10 不匹配。
declare
v_groupid varchar2(100);
v_gameid varchar2(100);
v_teamid varchar2(200);
v_chest_no number;
stmt VARCHAR2(2000);
count1 number;
temp number :=1;
cursor c_stage is select distinct var_group_id from aokk_group_def where var_group_type='KR'
and var_group_category='T';
begin
- open c_stage;
loop
fetch c_stage into v_groupid;
exit when c_stage%notfound;
for i in (select distinct var_kalateamappreg_teamid,var_kalateamappreg_groupid from aokk_kalateamappreg_stage where
var_kalateamappreg_groupid between 'GR14' and 'GR17' order by var_kalateamappreg_groupid )
loop
for j in (select distinct var_kalateamappreg_teamid,var_kalateamappreg_groupid from aokk_kalateamappreg_stage where
var_kalateamappreg_groupid between 'GR14' and 'GR17' order by var_kalateamappreg_groupid )
loop
if (i.var_kalateamappreg_teamid=j.var_kalateamappreg_teamid)
then
UPDATE aokk_kalateamappreg_stage SET aokk_kalateamappreg_CHESTNO=temp
WHERE var_kalateamappreg_groupid=i.var_kalateamappreg_groupid and
var_kalateamappreg_teamid=i.var_kalateamappreg_teamid;
temp:=temp+1;
elsif (i.var_kalateamappreg_teamid<>j.var_kalateamappreg_teamid)
then
UPDATE aokk_kalateamappreg_stage SET aokk_kalateamappreg_CHESTNO=temp
WHERE var_kalateamappreg_groupid=i.var_kalateamappreg_groupid and
var_kalateamappreg_teamid=i.var_kalateamappreg_teamid;
temp:=temp+10;
end if;
end loop;
end loop;
end loop;
close c_stage;
end;
我更新了表格中的组 ID,但它们没有正确更新。
输出:
VAR_KALATEAMAPPREG_TEAMID VAR_KALATEAMAPPREG_GROUPID AOKK_KALATEAMAPPREG_CHESTNO
281 GR14 43285
283 GR14 43336
267 GR14 43183
249 GR14 43132
248 GR14 43081
247 GR14 43030
240 GR14 42877
244 GR14 42928
238 GR14 42826
280 GR14 43234
320 GR14 43387
246 GR14 42979
239 GR16 43538
326 GR16 43689
270 GR17 43839
273 GR17 44121
271 GR17 43980
预期输出:
VAR_KALATEAMAPPREG_TEAMID VAR_KALATEAMAPPREG_GROUPID AOKK_KALATEAMAPPREG_CHESTNO
238 GR14 42826
240 GR14 42827
244 GR14 42928
246 GR14 42929
247 GR14 42930
248 GR14 42931
249 GR14 42932
267 GR14 42933
280 GR14 42934
281 GR14 42935
283 GR14 42936
320 GR14 42937
239 GR16 42948 Increment by 10
326 GR16 42949
270 GR17 42950 Increment by 10
271 GR17 42951
273 GR17 42952
如果在箱子编号也增加 10 之后组发生了变化。
【问题讨论】:
-
您的代码不包含
COMMIT语句。您需要将更改提交到数据库,以便其他会话可以看到它们。 -
现在我把提交和输出会显示错误
-
请解释预期的输出,因为它不一致。第 14 组到第 16 组的变化使胸部增加了 10(如描述所预期的那样)。但是从第 16 组到第 17 组的更改使胸部增加了 11。因此,如果存在另一个组(例如第 20 组),胸部会增加 10 或 11 或者可能是 12(由于组更改 +10 + 先前组更改的 2)。您发布的数据似乎取决于按组排序,但最初的尝试并没有强制执行。这是必需的吗?最后,如果将团队 id 为 210 和 271 的行颠倒过来(也不对这些行强制排序),结果会怎样?
标签: oracle plsql plsqldeveloper