高手指点,如何实现在pl/sql中

chenyonge 2010-07-28 09:23:40
有两个表
A表

上层 本层
1_ 0_
3_ 1_
3_ 2_
4_ 3_
5_ 4_
5_ 6_
7_ 3_
8_ 7_
9_ 8_
10_ 9_
11_ 10_
E_ 11_


b表
本层 周期(天) 开始时间 结束时间
1_ 20
2_ 10
3_ 40
4_ 8
5_ 60
7_ 90
8_ 5
10_ 15
11_ 25
如果给出 11_ 的结束时间 2010-7-31 能不能通过周期往前计算出1_~10_ 所有开始时间与结束时间
要求用存储过程写,请高手指点
...全文
84 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenyonge 2010-08-08
  • 打赏
  • 举报
回复
没有什么具体的关系,就是想通过关系,倒推出所有完成时间与开始时间
华夏小卒 2010-07-29
  • 打赏
  • 举报
回复
弱弱的问下,上层和下层,在周期,时间上有什么联系?
chenyonge 2010-07-29
  • 打赏
  • 举报
回复
如果3和5 作为上层有多行出现,你的语句可以吗
chenyonge 2010-07-29
  • 打赏
  • 举报
回复
先谢谢楼上,我试试
tangren 2010-07-28
  • 打赏
  • 举报
回复
--未调试,自己动手调试一下
CREATE OR REPLACE PROCEDURE p_getdate(i_enddate DATE, i_layer VARCHAR2(20)) IS
v_begindate DATE;
v_enddate DATE;
v_layer VARCHAR2(20);
BEGIN
UPDATE b
SET b.开始时间 = i_enddate - 周期
WHERE 本层 = i_layer
RETURNING 开始时间 INTO v_begindate;
v_layer := i_layer;
LOOP
v_endate := v_begindate;
SELECT 本层 INTO v_layer FROM a WHERE 上层 = v_layer;
EXIT WHEN v_layer = '0_';
UPDATE b
SET b.开始时间 = v_enddate - b.周期, b.结束时间 = v_enddate
WHERE 本层 = v_layer
RETURNING 开始时间 INTO v_begindate;
END LOOP;
END;

17,086

社区成员

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

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