我遇到了問題。oracle sql更新不能正常工作
在這裏我的表。
--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之前運行更新命令
爲什麼TABLEA與ID = 1只更新LAST_UPDATE,數量和步驟不會更新。
更新表A後:數= 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;
請幫助我。
謝謝大家。
您無法更新遊標的值。你需要把新的值賦給一個變量。 :) –
爲什麼插入成功tableA與cur.number = 1和cur.step = 1 ?. – user2964569
問題是更新的權利? –