2016-06-14 499 views
0

只需快速检查一下,是否可以用单个select语句替换所有事件。如果没有,我们计划编写一个函数来做这个替换。Oracle:替换多个字符串事件

样品字符串

select '#col1:[email protected], #col2:[email protected], #col3:[email protected], #col4:[email protected], #col5:[email protected]' str from dual 

预计输出

str 
--- 
col1 val1, col2 val2, col3 val3, col4 val4, col5 val5 

代码到目前为止

with test_table as 
(Select '#col1:[email protected], #col2:[email protected], #col3:[email protected], #col4:[email protected], #col5:[email protected]' str from dual) 

    select level "occurrence", REGEXP_substr(str, '#(.*?):', 1, level, 'in', 1) "column", REGEXP_substr(str, ':(.*?)@', 1, level, 'in', 1) "value" 
    from test_table 
    CONNECT BY REGEXP_COUNT(str, '#.+?:[email protected]') >= level 

其他细节

  1. 字符串模式是固定的,并且事先已知。
  2. 给定模式的出现是动态的,可以有任意数量的[column:value]对 - 它们实际上是[table column:alias]集合。
  3. 为了简单起见,我修剪了样本字符串,但它包含其他细节(表连接,where子句等),所以我们需要替换所有的事件。这实际上是一个选择语句。

回答