我需要编写一个过程来规范化一个记录,该记录具有由一个char连接的多个标记.我需要获取这些标记分割字符串并将每个标记作为新记录插入表中.Oracle是否有类似"拆分"功能的东西?
我在PL/SQL脚本中有一个逗号分隔的字符串(例如data:='a,b,c,d,e'),我需要在脚本中解析.
我想遍历字符串并处理每个项目.就像一个'foreach'循环.
这可能在PL/SQL中吗?有人能指点我一些代码吗?
我有oracle拆分查询的问题.
在使用oracle查询中的connect by和regular expression将逗号分隔数据拆分为多行时,我获得了更多的重复行.例如,实际上我的表有150行,在那两行中有逗号分隔的字符串,所以整体上我只得到155行,但我得到2000行.如果我使用distinct其工作正常但我不想在查询结果中重复行.
我尝试了以下查询,但它在查询结果中生成重复的行:
WITH CTE AS (SELECT 'a,b,c,d,e' temp,1 slno FROM DUAL
UNION
SELECT 'f,g',2 from dual
UNION
SELECT 'h',3 FROM DUAL)
SELECT TRIM(REGEXP_SUBSTR( TEMP, '[^,]+', 1, LEVEL)) ,SLNO FROM CTE
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(temp, '[^,]+')) + 1
Run Code Online (Sandbox Code Playgroud)
编辑
上面的select查询只能拆分单个逗号分隔的字符串,但是,当在具有多行的表上执行时,它会生成重复的行.如何限制重复的行?
如何使用SUBSTR和拆分Oracle中逗号分隔的字符串INSTR.
字符串'20 .4,12.5,3.5,0.2,0.2'.
我尝试使用下面的代码,但我无法在第二个逗号后得到该值.
SELECT substr('20.4,12.5,3.5,0.2,0.2',0,instr('20.4,12.5,3.5,0.2,0.2',',')-1)
value FROM dual -- 1. 20.4
Run Code Online (Sandbox Code Playgroud)
对于第二个值,我在第二个逗号后得到整个字符串.
SELECT substr('20.4,12.5,3.5,0.2,0.2',instr('20.4,12.5,3.5,0.2,0.2',',')+1,instr('20.4,
12.5,3.5,0.2,0.2',',',2,2)-1) st FROM dual -- result : 12.5,3.5,
Run Code Online (Sandbox Code Playgroud)
我想要每个逗号之后的值,比如
20.4
12.5
3.5等等.
我有这样的桌子
parent_item child_item quantity
A B 2
A C 3
B E 1
B F 2
Run Code Online (Sandbox Code Playgroud)
并希望根据数量将其分成多行
parent_item child_item quantity
A B 1
A B 1
A C 1
A C 1
A C 1
B E 1
B F 1
B F 1
The column quantity (1) is not really necessary.
Run Code Online (Sandbox Code Playgroud)
我可以在/ by-level的帮助下生成一些东西,但是对于大型表来说非常慢。我对/ by-connect的连接不是很熟悉,但这似乎可行,尽管我无法真正解释:
select distinct parent_item, level LEVEL_TAG, child_item, level||quantity
FROM table
CONNECT BY quantity>=level
order by 1 asc;
Run Code Online (Sandbox Code Playgroud)
我发现了类似的问题,但在大多数情况下,topicstarter希望将定界的列值拆分为多行(Oracle- 将单行拆分为多行)
解决此问题的最有效方法是什么?
谢谢