oracle 存储过程 一条一对多数据拆分成一对一数据插入另一个表

ahahaha22 2017-11-02 09:15:24
姓名 序号 变为 姓名 序号
张三 1,2,3 张三 1
张三 2
张三 3
...全文
546 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2017-11-02
  • 打赏
  • 举报
回复
引用 8 楼 weixin_38847048 的回复:
这个是把前面整个一大串 替换成了 to_char(level) 能达到目的么

列转行分方法非常多,还有union和unpivot(oracle 11g新特性)
花开了叫我 2017-11-02
  • 打赏
  • 举报
回复
这个是把前面整个一大串 替换成了 to_char(level) 能达到目的么
花开了叫我 2017-11-02
  • 打赏
  • 举报
回复
SQL> SQL> WITH t AS 2 (SELECT '张三' NAME, '2,3,4' id FROM dual) 3 SELECT NAME, regexp_replace(id, '(\w+)\,(\w+)\,(\w+)', LEVEL) id 4 FROM t 5 CONNECT BY LEVEL <= regexp_count(id, ',') + 1; NAME ID -------------------------------- -------------------------------------------------------------------------------- 张三 1 张三 2 张三 3
碧水幽幽泉 2017-11-02
  • 打赏
  • 举报
回复
引用 4 楼 weixin_38847048 的回复:
[quote=引用 3 楼 qq646748739 的回复:]
   
--写法2:
select name,trim(regexp_substr(id,'[^,]+',1,level)) as id
from tmp
connect by name = prior name
and prior dbms_random.value is not null
and level <= length(regexp_replace(id, '[^,]'))+1;

--写法3
select name,
regexp_replace(id,'(\w+)\,(\w+)\,(\w+)',level) id
from tmp
connect by level <= regexp_count(id,',')+1;


regexp_replace(id,'(\w+)\,(\w+)\,(\w+)','\'||to_char(level)) 你的这个后向引用完全误导新人[/quote]
自己测试下再评论,OK? 我的问题出在哪?
碧水幽幽泉 2017-11-02
  • 打赏
  • 举报
回复

--写法4:
select name,
substr(','||id||',',instr(','||id||',', ',', 1, level) + 1, instr(','||id||',', ',', 1, level + 1) -( instr(','||id||',', ',', 1, level) + 1) )
from tmp
connect by level <= regexp_count(id,',')+1
order by level
花开了叫我 2017-11-02
  • 打赏
  • 举报
回复
引用 3 楼 qq646748739 的回复:
   
--写法2:
select name,trim(regexp_substr(id,'[^,]+',1,level))  as id
 from tmp
connect by name = prior name 
 and prior dbms_random.value is not null
 and level <= length(regexp_replace(id, '[^,]'))+1;

--写法3
 select name,
            regexp_replace(id,'(\w+)\,(\w+)\,(\w+)',level) id
  from tmp
  connect by level <= regexp_count(id,',')+1;
 
regexp_replace(id,'(\w+)\,(\w+)\,(\w+)','\'||to_char(level)) 你的这个后向引用完全误导新人
碧水幽幽泉 2017-11-02
  • 打赏
  • 举报
回复
   
--写法2:
select name,trim(regexp_substr(id,'[^,]+',1,level)) as id
from tmp
connect by name = prior name
and prior dbms_random.value is not null
and level <= length(regexp_replace(id, '[^,]'))+1;

--写法3
select name,
regexp_replace(id,'(\w+)\,(\w+)\,(\w+)',level) id
from tmp
connect by level <= regexp_count(id,',')+1;
碧水幽幽泉 2017-11-02
  • 打赏
  • 举报
回复

--创建临时表
create table tmp as(select '张三' name, '1,2,3' id from dual);

碧水幽幽泉 2017-11-02
  • 打赏
  • 举报
回复
方法很多,先试试这个,我再用其他方法写个

select distinct name,regexp_substr(id,'[^,]+',level) as id
from tmp
connect by level <= regexp_count(id,',')+2
order by id
花开了叫我 2017-11-02
  • 打赏
  • 举报
回复
引用 9 楼 qq646748739 的回复:
[quote=引用 8 楼 weixin_38847048 的回复:] 这个是把前面整个一大串 替换成了 to_char(level) 能达到目的么
列转行分方法非常多,还有union和unpivot(oracle 11g新特性)[/quote] 我不知道多么? model split ... 太多了 对自己严格要求的程序员会为自己的错误感到羞愧 而你在转移话题
内容概要:本文系统研究了基于CNN-SVM的卷积神经网络与支持向量机融合的数据分类预测方法,聚焦其在工业故障识别中的应用,提供了完整的Matlab代码实现。通过CNN提取输入数据的深层空间特征,再由SVM进行高精度分类,充分发挥两者优势,有效提升了故障识别的准确性、鲁棒性与泛化能力。该方法特别适用于处理电力系统、机械设备等领域的高维、非线性、强噪声监测数据,在变压器故障诊断、轴承缺陷识别等场景中具有重要应用价值。文档还整合了机器学习、深度学习、图像处理、路径规划、电力系统优化等多个前沿科研方向的技术资源,配套大量Matlab/Simulink仿真案例与Python代码,全面支持科研复现与工程实践。; 适合人群:具备一定编程基础,熟练掌握Matlab或Python语言,从事电气工程、自动化、人工智能、机械故障诊断等相关领域研究的研发人员及高校研究生; 使用场景及目标:① 实现工业设备的状态监测与多类别故障分类;② 深入理解CNN与SVM融合模型的设计原理与工程实现细节;③ 借助所提供的丰富算法案例开展科研复现、模型优化与系统仿真验证; 阅读建议:建议按照文档目录结构系统化学习,结合百度网盘提供的完整代码资源进行动手实践,重点关注CNN特征提取层与SVM分类器之间的数据接口设计与参数调优策略,同时可延伸学习文中涉及的其他智能算法及其在电力系统、信号处理等领域的交叉应用,全面提升科研创新能力。

17,134

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧