guoyubo1231 2019-04-03 14:54 采纳率: 0%
浏览 906
已结题

ORACLE循环判断处理A表中字段是否在B表字段中出现(模糊LIKE)如果出现,将A表的代码插入到B表中。

业务逻辑我能描述,但实现的代码,我不太会写,有没有高手帮我看下该如何写。
需求描述:我两个表

图片说明

写一个循环从A表中取出 KEYWORDS 字段然后判断这个字段是否出现在B表的 '名称' OR '牌子 'OR '类型' 字段中 如果出现将A表字段对应的CODE插入到B表的CODE字段中。

举例 循环第一个抓到了3系 然后 与TABLE B 中 名称、牌子、类型做LIKE 查询是否在这三个字段中 如果存在 B表 第一行CODE 字段变为 01 ,完成一次循环。
图片说明

---------------------------------这个是我写的一个想象的代码,但有些步骤不知道怎么写,有大神能帮我补全吗。


create or replace procedure testProc_guo
as
cursor cur is select keywords,brand_code from TMP_GUOSHOU_dim_test;
keywords varchar(100);
brand_code varchar(100);

cursor cur2 is select vehicle_brand_name,vehicle_series_name,vehicle_model_name from tmp_guoshou_guoyubo;
vehicle_brand_name varchar(100);
vehicle_series_name varchar(100);
vehicle_model_name varchar(100);

Begin

open cur;
fetch cur into keywords;
while cur%found loop
dbms_output.put_line(keywords);
fetch cur into keywords;
end loop;

open cur2; 
fetch cur2 into vehicle_brand_name,vehicle_series_name,vehicle_model_name;

--做一个A表和B表的判断 得到对应的 brand_code 我想把 这个brand_code 和 名称 牌子 类型 这三个字段一起放到一个新表里面这块不太会写
loop
case when vehicle_brand_name like '%'||keywords||'%' or
vehicle_series_name like '%'||keywords||'%' or
vehicle_model_name like '%'||keywords||'%'
then cur1.brand_code
end
end loop;

insert into nmlz_veh_model_custom_guo (vehicle_brand_name,vehicle_series_name,vehicle_model_name,brand_code)
values (cur2.vehicle_brand_name,cur2vehicle_series_name,cur2vehicle_model_name,cur.brand_code)

close cur;
close cur2;
Exception
When others then
Rollback;
End;


  • 写回答

3条回答 默认 最新

  • 一只神奇的暴躁 2019-04-03 15:14
    关注

    1,把B表的名称,牌子,类型拆开,另外生成个主键名称+牌子+类型
    select 名称 as searchid,名称||牌子||类型 as mainid

    into C
    from B
    union
    select 牌子,名称||牌子||类型 from B
    union
    select 类型,名称||牌子||类型 from B

    结果类似这种
    searchid,mainid
    华晨宝马 ,华晨宝马宝马3系宝3
    宝马3系 ,华晨宝马宝马3系宝3
    宝3 ,华晨宝马宝马3系宝3
    。。。

    这样,你就可以直接关联了,先把A和C关联,找到关键字出现的mainid,然后用C的mainid去B表里找就行了
    SELECT disticnt B.*,CASE WHEN c.searid is not null then '01' else '00' end
    FROM B
    LEFT JOIN
    (select c.mainid from C
    inner join A
    on b.searchid LIKE '%'+a.keywords+'%') D
    on D.mainid =B.名称||B.牌子||B.类型

    评论

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能