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