存储过程求解思路!

我单身呢 2018-05-24 08:22:15
,这是表A。根据days拆成相对应的行数,比如FLNO=B-1911的这行,days=8,则拆分为 8条数据,dates_starts是最小时间,dates_ends是最大时间,这八行的数据,dates_starts+1直到结束。 相同结构的表B,假如有FLNO-8-1911 的start_days=‘2018-05-28’ and dates_ends=‘2018-05-30’,则删除表A中的FLNO=B-1911这些数据,重新插入 从B表中start_days=‘2018-05-28’ and dates_ends=‘2018-05-30’的三条数据(逻辑和A表拆分一致)。

求大神~~~~~~~
...全文
362 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 7 楼 u014796025 的回复:
[quote=引用 6 楼 baidu_36457652 的回复:] 可以先连表做个判断,到底留哪些时间段,然后递归不是省事些吗
with t1 as ( select flno,jixing,(to_date(dates_start,'yyyy-mm-dd')+level-1) as dates_start,to_date(dates_end,'yyyy-mm-dd') as dates_end ,flag,days,biaoti,act_area from MF_TEST1 connect by level <=days and flno= prior flno and dates_end= prior dates_end and PRIOR DBMS_RANDOM.VALUE IS NOT NULL ), t2 as (select * from MF_TEST1_UPDATE) select flno,jixing,(to_date(dates_start,'yyyy-mm-dd')+level-1) as dates_start,to_date(dates_end,'yyyy-mm-dd') ,flag,days,biaoti,act_area from MF_TEST1_UPDATE connect by level <=days and flno= prior flno and dates_end= prior dates_end and PRIOR DBMS_RANDOM.VALUE IS NOT NULL union all select t1.flno,t1.jixing,t1.dates_start,t1.dates_end ,t1.flag,t1.days,t1.biaoti,t1.act_area from t1 left join t2 on t1.flno=t2.flno where 1=1 and t2.flno is null ORDER BY 3 这样就OK了。谢谢你![/quote] 很强
我单身呢 2018-05-25
  • 打赏
  • 举报
回复
引用 6 楼 baidu_36457652 的回复:
可以先连表做个判断,到底留哪些时间段,然后递归不是省事些吗
with t1 as ( select flno,jixing,(to_date(dates_start,'yyyy-mm-dd')+level-1) as dates_start,to_date(dates_end,'yyyy-mm-dd') as dates_end ,flag,days,biaoti,act_area from MF_TEST1 connect by level <=days and flno= prior flno and dates_end= prior dates_end and PRIOR DBMS_RANDOM.VALUE IS NOT NULL ), t2 as (select * from MF_TEST1_UPDATE) select flno,jixing,(to_date(dates_start,'yyyy-mm-dd')+level-1) as dates_start,to_date(dates_end,'yyyy-mm-dd') ,flag,days,biaoti,act_area from MF_TEST1_UPDATE connect by level <=days and flno= prior flno and dates_end= prior dates_end and PRIOR DBMS_RANDOM.VALUE IS NOT NULL union all select t1.flno,t1.jixing,t1.dates_start,t1.dates_end ,t1.flag,t1.days,t1.biaoti,t1.act_area from t1 left join t2 on t1.flno=t2.flno where 1=1 and t2.flno is null ORDER BY 3 这样就OK了。谢谢你!
  • 打赏
  • 举报
回复
可以先连表做个判断,到底留哪些时间段,然后递归不是省事些吗
我单身呢 2018-05-25
  • 打赏
  • 举报
回复
引用 4 楼 baidu_36457652 的回复:
[quote=引用 3 楼 u014796025 的回复:] [quote=引用 2 楼 baidu_36457652 的回复:] select flno,(dates_start+level-1) as dates_start,dates_end from t1 connect by level <=days and flno= prior flno and dates_end= prior dates_end and PRIOR DBMS_RANDOM.VALUE IS NOT NULL 我没测试 你试一下
大佬,可以的,虽然我看不懂。。。。有点高级了。。。假如有FLNO-8-1911 的start_days=‘2018-05-28’ and dates_ends=‘2018-05-30’,则删除表A中的FLNO=B-1911这些数据,重新插入 从B表中start_days=‘2018-05-28’ and dates_ends=‘2018-05-30’的三条数据,这个是在一起的,是不是得写个存储过程??才能实现[/quote] 我不是大佬啊。。 我没太看懂 你的需求。。。[/quote] 刚刚你写的那段代码,例如FLNO=B-1911,递归,会得到8条记录,start_date从19号到26号。这是没错的。假如有表B,存在一条记录 FLNO=B-1911,start_dates=‘2018-05-28’ and dates_ends=‘2018-05-30’,DAYS=4;则要更新表A的记录,将表A中FLNO-B-1911的所有记录,start_dates从28号 递归至30号 共4条记录。之前的19号到26号的数据就删除了。
  • 打赏
  • 举报
回复
引用 3 楼 u014796025 的回复:
[quote=引用 2 楼 baidu_36457652 的回复:] select flno,(dates_start+level-1) as dates_start,dates_end from t1 connect by level <=days and flno= prior flno and dates_end= prior dates_end and PRIOR DBMS_RANDOM.VALUE IS NOT NULL 我没测试 你试一下
大佬,可以的,虽然我看不懂。。。。有点高级了。。。假如有FLNO-8-1911 的start_days=‘2018-05-28’ and dates_ends=‘2018-05-30’,则删除表A中的FLNO=B-1911这些数据,重新插入 从B表中start_days=‘2018-05-28’ and dates_ends=‘2018-05-30’的三条数据,这个是在一起的,是不是得写个存储过程??才能实现[/quote] 我不是大佬啊。。 我没太看懂 你的需求。。。
我单身呢 2018-05-25
  • 打赏
  • 举报
回复
引用 2 楼 baidu_36457652 的回复:
select flno,(dates_start+level-1) as dates_start,dates_end from t1 connect by level <=days and flno= prior flno and dates_end= prior dates_end and PRIOR DBMS_RANDOM.VALUE IS NOT NULL 我没测试 你试一下
大佬,可以的,虽然我看不懂。。。。有点高级了。。。假如有FLNO-8-1911 的start_days=‘2018-05-28’ and dates_ends=‘2018-05-30’,则删除表A中的FLNO=B-1911这些数据,重新插入 从B表中start_days=‘2018-05-28’ and dates_ends=‘2018-05-30’的三条数据,这个是在一起的,是不是得写个存储过程??才能实现
  • 打赏
  • 举报
回复
select flno,(dates_start+level-1) as dates_start,dates_end from t1 connect by level <=days and flno= prior flno and dates_end= prior dates_end and PRIOR DBMS_RANDOM.VALUE IS NOT NULL 我没测试 你试一下
我单身呢 2018-05-25
  • 打赏
  • 举报
回复
没人吗?呜呜呜

17,086

社区成员

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

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