oracle 程序循环一个字符串并插入另一个 table
oracle procedure looping a string and insert into another table
我有这个字符串: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
等等..
任何人都可以帮忙吗?
您为此需要程序或触发器的任何具体原因?
在单个 SQL 中使用 REGEXP_SUBSTR
和 CONNECT BY
。您可以在过程中包含查询以通过传递字符串参数来执行 insert
。
'RC(.+?)ZQ'
- 匹配 RC 和下一个 ZQ
之间的任何内容
'ZQ(.+?)(RC|$)'
- 匹配 ZQ 和下一个 RC 或行尾之间的任何内容
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')
| RC | ZQ |
|------|----|
| 1500 | 10 |
| 2400 | 20 |
| 23 | 3 |
| 2322 | 22 |
我有这个字符串: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
等等..
任何人都可以帮忙吗?
您为此需要程序或触发器的任何具体原因?
在单个 SQL 中使用 REGEXP_SUBSTR
和 CONNECT BY
。您可以在过程中包含查询以通过传递字符串参数来执行 insert
。
'RC(.+?)ZQ'
- 匹配 RC 和下一个 ZQ
'ZQ(.+?)(RC|$)'
- 匹配 ZQ 和下一个 RC 或行尾之间的任何内容
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')
| RC | ZQ |
|------|----|
| 1500 | 10 |
| 2400 | 20 |
| 23 | 3 |
| 2322 | 22 |