問題があります。oracle sqlの更新が機能していない100%
ここに私のテーブル。
--tableA--
id | number | step | limit | last_update
-------------------------------------------------------
1 | 0 | 0 | 5 | 10-05-2016 08:00:00
--tableB--
id | number | step | last_update
--------------------------------------------
1 | 1 | 1 | 10-05-2016 08:00:00
ここに私のコード。
for cur in
(
select id,number,step,limit,last_update
from
tableA
)
loop
if cur.number < cur.limit then
cur.number := mod(cur.number,3) + 1; --calculator cur.number increase from 1 -> 3
insert into tableB(id,number,step,last_update) -- INSERT OK
values (cur.id,cur.number,cur.step + 1,cur.last_update);
commit;
cur.step := cur.step + trunc(cur.number/3); --calculator cur.step increase by cur.number
-- here : cur.number = 1 and cur.step = 1
update tableA
set
number = cur.number -- not update
,step = cur.step -- not update
,last_update = sysdate -- update ok
where id = cur.id
commit;
end if;
end loop;
cur.number = 1とcur.step = 1ラン更新コマンドの前
理由IDとにtableA = 1のみLAST_UPDATE、番号を更新し、更新しないステップ。更新にtableA後
:番号= 0、ステップ= 0
更新コード
for cur in
(
select id,number,step,limit,last_update
from tableA
)
loop
if cur.number < cur.limit then
cur.number := mod(cur.number,3) + 1; --calculator cur.number increase from 1 -> 3
insert into tableB(number,step,last_update) -- INSERT OK
values (cur.number,cur.step + 1,cur.last_update);
commit;
-- cur.step := cur.step + trunc(cur.number/3); --calculator cur.step increase by cur.number
-- here : cur.number = 1 and cur.step = 1
select number,step into temp_number,temp_step
from tableB where id = cur.id;
update tableA
set
number = temp_number -- not update
,step = (temp_step - 1) + trunc(temp_number/3) -- not update
,last_update = sysdate -- update ok
where id = cur.id
commit;
end if;
end loop;
私を助けてください。
ありがとうございます。
カーソルの値は更新できません。新しい値を変数に入れる必要があります。 :) –
cur.number = 1かつcur.step = 1?で成功tableAを挿入するのはなぜですか? – user2964569
問題は正しく更新されていますか? –