利用游标处理表数据问题求助

表中的每一条记录和其后的每条记录进行比较,根据前后记录中字段的相似度然后删除前后的某条记录
我用的双重游标 表是千万的数据根本跑不出来 又什么其他的处理方式或者优化方法吗

for a_cur in sub_cur1 loop
exit when sub_cur1%notfound;
start_num1 := sub_cur1%ROWCOUNT;
--DBMS_OUTPUT.put_line('外循环第'||start_num1||'次循环');
insert into dzdp_ywb_tmp_log values ('外循环第'||start_num1||'次循环');
--判断当前记录在表中是否存在
select count(shop_id) into ctnum1 from dzdp_ywb where shop_id = a_cur.shop_id;
if(ctnum1=0) then
continue;
end if;
select shop_id, baidu_longitude, baidu_latitude, name
into sid, jd, wd, mname
from dzdp_ywb
where shop_id = a_cur.shop_id;
for b_cur in sub_cur2 loop
exit when sub_cur2%notfound;
start_num2:=sub_cur2%ROWCOUNT;
--判断当前记录在表中是否存在
select count(shop_id) into ctnum2 from dzdp_ywb where shop_id = b_cur.shop_id;
if (start_num2 <= start_num1 or ctnum2=0 ) then
continue;
end if;
--调用函数 计算距离
distance := get_distance(jd,wd,b_cur.baidu_longitude,b_cur.baidu_latitude);
--调用函数 计算距离
if (distance < 1) then
--如果距离小于1km 则计算相似度
similarity := SYS.UTL_MATCH.edit_distance_similarity(mname,b_cur.name);
if (similarity > 50) then
-- 记录名称较长的商户
if (length(mname) > length(b_cur.name)) then
--插入要删除的数据到dzdp_ywb_tmp表中
insert into dzdp_ywb_tmp01
(shop_id_b,shop_id_e)
values
(sid,b_cur.shop_id);
--删除 dzdp_ywb 表数据
delete from dzdp_ywb where shop_id=sid;
commit;
exit;--跳出循环

else
insert into dzdp_ywb_tmp01
(shop_id_b,shop_id_e)
values
(b_cur.shop_id,sid);
delete from dzdp_ywb where shop_id=b_cur.shop_id;
commit;
--cnt := cnt + 1;
end if;
end if;
end if;

1个回答

表中的每一条记录和其后的每条记录进行比较,这个“和其后的每条记录”怎么界定?

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

4
oracle用游标将A表的字段和B表3个字段匹配,匹配到就将B表的三个字段和A表的CODE字段输入到一张新表里面
1
javascript 前端indexDB,根据游标遍历所有数据排序无效问题?
1
救救孩子,实现当两张表拥有共同的字段时将两张表相应内容插入第三张表的问题
2
python操作mysql怎么开启事务
1
使用游标查询部门为10的员工,并为其增加1000元,我这里测试反馈数据不正确,麻烦请教感谢
2
sql使用游标插入数据 为什么出现死循环?
3
请问使用游标处理动态sql的时候出现长度超长的问题如何解决?
1
C#中选完combox的值,曲线上自动出现相关值的游标是如何实现的,各位大神帮忙想想要用到游标的什么事件
1
sqlserver游标查询use @Name这行报错,我怀疑是@Name类型不支持use,求解决方法
3
为什么Python调用Pymysql执行sql查询语句比数据库中慢得很多很多?
2
24小时内只向数据库中插入一条数据
1
springboot2.1.8集成druid连接池 无法实现sql监控
0
1、用户表(用户编号,用户名称, 性别 ,出身日期, 身份证号,所属部门编号,所属职位编号,是否管理员[bool]) 2、部门表(部门编号,部门名称) 3、用户工资表(用户编号,工资月份,工资金额)
2
关于在listview中隐藏item的某控件
0
Oracle触发器能否对正在写入的表格进行读写?
1
C#chart控件上设置两个游标
2
Java WEB 连接数据库的登录界面失败?
0
SQL server 将游标查询结果显示在一个表中,现在是每一条显示一个表头
1
oracle 测试存储过程,执行一次,上次的返回结果便累加上去,如何清除?
1
Java中迭代器对象的一个疑问