首页 > 解决方案 > 在 Oracle PLSQL 中使用潜台词在文本中搜索

问题描述

我在 master_t 表中有这个查询,它包含 ration_category 列和扇区列中的许多扇区,例如“BN:INS”或“BN”或“BN:IM:INS”等。

select distinct ratio_category d from master_t
where status = 'Y' and (SECTORS = :P23_SECTORS or
(INSTR(':'||:SECTORS ||':',:P23_SECTORS)>0 OR UPPER(:P23_SECTORS) = 'ALL')) order by ratio_category


 P23_SECTORS= 'BN:INS'

 SECTORS='INS:MFI:SB:BN'

: is a separator of multi data

我需要检查 P23_sectors 中的数据是否存在于 SECTORS 变量中,但是此查询没有获取数据,因为多数据分隔符

无论如何调整查询,以便我可以将潜文本与全文注释进行比较:顺序不同。

预期输出:LL PP CC

谢谢

标签: oracleplsqlplsql-package

解决方案


这是一个选项(阅读代码中的注释):

SQL> with master_t (ratio_category, sectors) as
  2    -- sample data
  3    (select 1, 'INS:MFI:SB:BN' from dual union all
  4     select 2, 'BN:LF'         from dual
  5    ),
  6  split_t as
  7    -- split SECTORS into rows
  8    (select ratio_category,
  9            sectors,
 10            regexp_substr(sectors, '[^:]+', 1, column_value) sec
 11     from master_t cross join
 12          table(cast(multiset(select level from dual
 13                              connect by level <= regexp_count(sectors, ':') + 1
 14                             ) as sys.odcinumberlist))
 15    ),
 16  split_23 as
 17    -- split P23_SECTORS into rows
 18    (select regexp_substr('&&P23_SECTORS', '[^:]+', 1, level) sec,
 19            regexp_count('&&P23_SECTORS', ':') + 1 cnt
 20     from dual
 21     connect by level <= regexp_count('&&P23_SECTORS', ':') + 1
 22    )
 23  -- return rows that contain complete P23_SECTORS value(s)
 24  select t.ratio_category, t.sectors
 25  from split_t t join split_23 s on s.sec = t.sec
 26  group by t.ratio_category, t.sectors
 27  having count(*) = max(s.cnt);
Enter value for p23_sectors: BN:INS

RATIO_CATEGORY SECTORS
-------------- -------------
             1 INS:MFI:SB:BN

SQL>

注意人们发布的评论。他们确实有丰富的编程经验,你宁愿听他们说什么,感谢他们花时间检查你的问题。你对 Ed 的回复相当粗鲁;如果我是 Ed,我会确保不回答您未来的任何问题(阅读:我会让您解决自己的问题)。


推荐阅读