
也许不是最有效的方法,但是它是递归工作的(也就是说,如果它
crit_description本身包含“占位符”,那么这些占位符也会被扩展。(第一个解决方案比下面的显示更简单,没有执行此递归步骤。)我添加的第三个示例输入。如果可以再清理一些,我将在以后再次发布。
注意:这假定在
criteria_info表中实际找到所有“占位符” 。我没有测试如果找不到它们会发生什么。OP陈述要求。
with inputs ( criteria ) as ( select ' = True' from dual union all select ' > ' from dual union all select ' = ' from dual ), criteria_info ( crit_id, crit_description ) as ( select 1, 'Example 1' from dual union all select 2, 'Example 2' from dual union all select 3, 'Example 3' from dual union all select 4, ' + ' from dual ), rec ( criteria, new_str ) as ( select criteria, criteria from inputs union all select r.criteria, regexp_replace(r.new_str, '$d+', c.crit_description, 1, 1) from rec r inner join criteria_info c on to_number(regexp_substr(r.new_str, '$(d+)', 1, 1, null, 1)) = c.crit_id where regexp_substr(r.new_str, '$d+') is not null )select criteria, new_strfrom recwhere regexp_substr(new_str, '$d+') is null;CRITERIA NEW_STR--------- ------------------------------------ = True Example 1 = True > Example 2 > Example 3 = Example 1 = Example 2 + Example 33 rows selected.
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)