create or replace
PROCEDURE update_new(param in varchar2) IS
CURSOR cur1 IS SELECT l.id from leaguer l where l.imei =param order by l.id desc;
curid number :=0;
idx number := 1;
maxId number;
msg varchar2(200);
BEGIN
BEGIN
OPEN cur1;
LOOP
FETCH cur1 INTO curid;
EXIT WHEN cur1%NOTFOUND;
dbms_output.put_line(curid);
if idx = 1 then
maxId := curid;
idx :=2;
else
msg := to_char(maxId);
msg := msg || '-';
msg := msg || to_char(curid);
update PRODUCT_CLICK qb set qb.leaguer_id = maxId where qb.leaguer_id = curid;
if sql%rowcount >0 then
msg := msg ||' PRODUCT_CLICK ' ||to_char(sql%rowcount);
end if;
dbms_output.put_line(msg);
msg := null;
commit;
end if;
END LOOP;
CLOSE cur1;
END;
END update_new ;
CREATE OR REPLACE PROCEDURE loopImei IS
CURSOR cur1 IS SELECT imei from leaguer group by imei having count(imei)>1;
imei varchar(200);
BEGIN
BEGIN
OPEN cur1;
LOOP
FETCH cur1 INTO imei;
EXIT WHEN cur1%NOTFOUND;
if not imei is null then
-- dbms_output.put_line(imei);
update_new(imei);
end if;
END LOOP;
CLOSE cur1;
END;
END loopImei;
过程遇到的问题:
1、update不成功,因为我一开始curid的声明为id,而在leaguer表中就有id字段,变为curid即可。
总是遗漏end if;导致报错。
异常处理,写上后报错。未找到原因。
PROCEDURE update_new(param in varchar2) IS
CURSOR cur1 IS SELECT l.id from leaguer l where l.imei =param order by l.id desc;
curid number :=0;
idx number := 1;
maxId number;
msg varchar2(200);
BEGIN
BEGIN
OPEN cur1;
LOOP
FETCH cur1 INTO curid;
EXIT WHEN cur1%NOTFOUND;
dbms_output.put_line(curid);
if idx = 1 then
maxId := curid;
idx :=2;
else
msg := to_char(maxId);
msg := msg || '-';
msg := msg || to_char(curid);
update PRODUCT_CLICK qb set qb.leaguer_id = maxId where qb.leaguer_id = curid;
if sql%rowcount >0 then
msg := msg ||' PRODUCT_CLICK ' ||to_char(sql%rowcount);
end if;
dbms_output.put_line(msg);
msg := null;
commit;
end if;
END LOOP;
CLOSE cur1;
END;
END update_new ;
CREATE OR REPLACE PROCEDURE loopImei IS
CURSOR cur1 IS SELECT imei from leaguer group by imei having count(imei)>1;
imei varchar(200);
BEGIN
BEGIN
OPEN cur1;
LOOP
FETCH cur1 INTO imei;
EXIT WHEN cur1%NOTFOUND;
if not imei is null then
-- dbms_output.put_line(imei);
update_new(imei);
end if;
END LOOP;
CLOSE cur1;
END;
END loopImei;
过程遇到的问题:
1、update不成功,因为我一开始curid的声明为id,而在leaguer表中就有id字段,变为curid即可。
总是遗漏end if;导致报错。
异常处理,写上后报错。未找到原因。
本文介绍了一个使用PL/SQL编写的程序,该程序包含两个过程:update_new和loopImei。update_new过程旨在更新PRODUCT_CLICK表中的leaguer_id字段,而loopImei过程则用于遍历leaguerg表中重复的IMEI记录并调用update_new过程。文章还讨论了在实现过程中遇到的问题及解决方案。
2445

被折叠的 条评论
为什么被折叠?



