【发布时间】:2016-08-02 13:55:12
【问题描述】:
我有一个 PLSQL 代码从一个有 30 行的表中获取数据,其中 10 列的分隔符长度为 3,我需要根据这 10 列中的字段数将 1 行转换为多行。
所以我将所有数据加载到 1 个临时表中,并在临时表上调用一个游标,它将拆分数据并将多行插入主表。
游标内部我使用regexp_substr 来拆分值,我使用的正则表达式是[^\\|]+{3},拆分后我没有得到实际值。
用于测试用例的样本数据是
100|||200||300|||400||||0
拆分后我应该得到如下值
100, 200||300 , 400 , |0
但我得到的是
100 , 200, 300 ,400, 0
谁能给我建议的正确方法?
等待回复! 谢谢
【问题讨论】:
-
你需要 100||20|||300|||400 到 100-1 行 200-2 行 300-3 行?
-
声明光标 cdr 是 select * from TEMP_TABLE; begin for b_new in cdr loop for i in 0..regexp_count(b_new.CHARGE,'[~]') 循环插入 MAIN_TABLE (col1,col2,col3 etc ... ) 值 (regexp_substr(b_new.col1, '[^ ~]+', 1, i),'0'),b_new.col2,regexp_substr(b_new.col3, '[^~]+', 1, i), etc );结束循环;结束循环;结尾;上面的代码适用于分隔符长度 =1 ,如何使它适用于 |||作为分隔符?
-
带有 3 列 A B C 1 2||2 3 的示例表。然后我需要输出为 1 2 3 - 第 1 行和 1 2 3 - 第 2 行
-
使用Replace 替换'|||'像'~'这样花哨的东西。
-
是的,我使用了相同的方法,但我可以在选定的整行上进行替换吗???我的意思是光标中的 etire Row ?因为如果我在每一列上工作,它会减慢我的进程,因为它每小时处理数以亿计的记录。这里 b_new 将是上面示例中的整行