我有一个字段,其中填充了一系列特定格式的条件:
CRITERIA $1 = True $2 > $3
标准信息存储在表中
CRIT_ID CRIT_DESCRIPTION 1 Example 1 2 Example 2 3 Example 3
最终输出应如下所示
CRITERIA Example 1 = True Example 2 > Example 3
谁能建议如何最好地做到这一点?到目前为止,我已经尝试过REPLACE并涉足REGEXP_REPLACE …
也许不是最有效的方法,但是它是递归工作的(也就是说,如果它crit_description本身包含“占位符”,那么这些占位符也会被扩展。(第一个解决方案比下面的显示更简单,没有执行此递归步骤。)我添加的第三个示例输入。如果可以再清理一些,我将在以后再次发布。
crit_description
注意:这假定在criteria_info表中实际找到所有“占位符” 。我没有测试如果找不到它们会发生什么。OP陈述要求。
criteria_info
with inputs ( criteria ) as ( select '$1 = True' from dual union all select '$2 > $3' from dual union all select '$1 = $4' 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, '$2 + $3' 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_str from rec where regexp_substr(new_str, '\$\d+') is null ; CRITERIA NEW_STR --------- ------------------------------------ $1 = True Example 1 = True $2 > $3 Example 2 > Example 3 $1 = $4 Example 1 = Example 2 + Example 3 3 rows selected.