oracle过程循环一个字符串并插入另一个表

时间:2018-03-24 14:01:09

标签: oracle plsql triggers procedure

我有这个字符串:RC1500ZQ10RC2400ZQ20RC23ZQ3RC2322ZQ22

我需要创建一个过程或触发器来拆分上面的字符串,然后将其作为行插入到另一个表中。

喜欢这个:

RC = NEW ROW . 
ZQ = NEW COULMN .
Row 1 RC1500ZQ10 = 1500,10 
Row 2 RC2400ZQ20 = 2400,20
Row 3 RC23  ZQ3  = 23,3
Row 4 RC2322ZQ22 = 2322,22

依旧......

有人可以为此提供帮助吗?

1 个答案:

答案 0 :(得分:4)

为什么需要程序或Trigger的具体原因?

在单个SQL中使用REGEXP_SUBSTRCONNECT BY。您可以在过程中包含查询,以通过传递字符串参数来执行insert

'RC(.+?)ZQ' - 匹配RC和下一个ZQ之间的任何内容

'ZQ(.+?)(RC|$)' - 匹配ZQ与下一个RC或行结束之间的任何内容

SQL Fiddle

Oracle 11g R2架构设置

create table t as 
select 'RC1500ZQ10RC2400ZQ20RC23ZQ3RC2322ZQ22' as s from dual;

查询1

--INSERT INTO yourtarget(rc,zq) 
SELECT REGEXP_SUBSTR(s, 'RC(.+?)ZQ', 1, LEVEL, NULL, 1)     AS RC,
       REGEXP_SUBSTR(s, 'ZQ(.+?)(RC|$)', 1, LEVEL, NULL, 1) AS ZQ
FROM   t --or DUAL
CONNECT BY LEVEL <= REGEXP_COUNT(s, 'RC(.+?)ZQ')

<强> Results

|   RC | ZQ |
|------|----|
| 1500 | 10 |
| 2400 | 20 |
|   23 |  3 |
| 2322 | 22 |