百分求教数据集操作问题(快来接分)

worilo 2007-10-23 11:35:53
问题如下,随便举的例子:
仓库统计表:storgeCount(sDateMonth,storgeNo,objectKind, objectNo,)
在库管理表:factoryNow(fDateMonth,objectNo,storgeNo,objetcCountNum)
在仓库统计表中根据统计年月sDateMonth查出一组以员工编号eno分组的记录
Select A.sDateMonth, A.storgeNo, A.objectKind, A.objectNo, count(A.objectNo) from storgeCount A where A.sDateMonth=’YYYY/MM’ group by A.objectNo
如:
A.sDateMonth storgeNo objectKind objectNo count(A.objectNo)
2007/09 001 1 1001 8
2007/09 001 1 1002 15
2007/09 001 2 2002 12
2007/09 002 3 3001 18


然后利用查询出来的结果集中的每条数据来对在库管理表进行更新操作
比如依次将
fDateMonth=’ 2007/09’, objectNo=’ 1001’, storgeNo=’001’,objetcCountNum=8
fDateMonth=’ 2007/09’, objectNo=’ 1002’, storgeNo=’001’,objetcCountNum=15
fDateMonth=’ 2007/09’, objectNo=’ 2002’, storgeNo=’001’,objetcCountNum=12
…插入在库管理表。

这里就是要遍历第一次查询出来的所有结果集,对其中每条记录进行操作。除了用游标有没有其他更好的办法


谢谢了。。。
...全文
94 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
worilo 2007-10-23
  • 打赏
  • 举报
回复
up!
worilo 2007-10-23
  • 打赏
  • 举报
回复
沙发也没人要
worilo 2007-10-23
  • 打赏
  • 举报
回复
不用游标,可以用merge into来实现
如下
merge into table A
using (select 。。。from B)
on(cA1=cB1...) --对两表的对应列进行比较
where matched then
update... --匹配则update
where not matched then
insert... --未匹配则insert
wang_wuhui 2007-10-23
  • 打赏
  • 举报
回复
...白看了这么多..结了帖吧..老兄..呵呵..
对了,也要把你做出来的方法和大家分享一下呀..
sanmmu 2007-10-23
  • 打赏
  • 举报
回复
晕死,贴出来让我研究下了。。。
sanmmu 2007-10-23
  • 打赏
  • 举报
回复
感觉还是用游标来实现,第一存在判断,第二(即使用case...when...)一条sql语句中可以同时存在insert和update?
worilo 2007-10-23
  • 打赏
  • 举报
回复
散分啦。。。下班就结
worilo 2007-10-23
  • 打赏
  • 举报
回复
搞定了,呵呵,不用游标
worilo 2007-10-23
  • 打赏
  • 举报
回复
kidman_ray
Kidman Ray
等 级:
发表于:2007-10-23 15:33:508楼 得分:0
根据楼主的需求。

程序的大体结构如下:
利用游标取得处理对象数据
游标循环内:
SELECT INTO取得处理数据是否存在
更新或者插入
===========================================
恩,目的是那样的,但是我就是想知道如果除去游标的话有没有另外的方法来替代,因为要用到的地方数据量会很大,用游标的话性能影响比较大。我感觉应该可以用别的方法实现的,继续顶
雨男Mohican 2007-10-23
  • 打赏
  • 举报
回复
根据楼主的需求。

程序的大体结构如下:
利用游标取得处理对象数据
游标循环内:
SELECT INTO取得处理数据是否存在
更新或者插入


worilo 2007-10-23
  • 打赏
  • 举报
回复
sorry,我说的不够全面,那个查询分组的也写的不对
这里并不是直接将整个结果集进行插入或更新操作,而是要对查询出的结果集中每一条记录进行一个判断,判断其是否存在与在库表中再来决定该条记录是应该insert还是update
sanmmu 2007-10-23
  • 打赏
  • 举报
回复
如我搞得有错误,希望大家提出来,一起讨论下哦。。。
sanmmu 2007-10-23
  • 打赏
  • 举报
回复
楼主和4楼的查询语句有错误哦,查询语句中有count(*)这样的聚合函数,如果选择列包含列、表达式和聚合函数,在group by分组时,这些列、表达式都必须出现在group by子句中!还有我试了下,像搂主的A.sDateMonth=’YYYY/MM’ 我不管用日期型还是字符型都查询不到数据。不知是不是。。。?
根据楼主的意思,改下,看能符合楼主的要求不。。。
update factoryNow a set(fDateMonth,objectNo,storgeNo,objetcCountNum)=(select sDateMonth,objectNo,storgeNo,count(*) from storgeCount where a.关联字段= b.关联字段 group byobjectNo,fDateMonth,storgeNo,objetcCountNum)
C_C_L 2007-10-23
  • 打赏
  • 举报
回复
update factoryNow b set (fDateMonth,objectNo,storgeNo,objetcCountNum)=(Select A.sDateMonth, A.storgeNo, A.objectKind, A.objectNo, count(*) objetcCountNum from storgeCount A where A.sDateMonth=’YYYY/MM’and a.关联字段= b.关联字段 group by A.objectNo)
worilo 2007-10-23
  • 打赏
  • 举报
回复
有点问题修改下,
问题如下,随便举的例子:
仓库统计表:storgeCount(sDateMonth,storgeNo,objectKind, objectNo,)
在库管理表:factoryNow(fDateMonth,objectNo,storgeNo,objetcCountNum)
在仓库统计表中根据统计年月sDateMonth查出一组以员工编号eno分组的记录
Select A.sDateMonth, A.storgeNo, A.objectKind, A.objectNo, count(*) from storgeCount A where A.sDateMonth=’YYYY/MM’ group by A.objectNo
如:
A.sDateMonth storgeNo objectKind objectNo count(*)
2007/09 001 1 1001 8
2007/09 001 1 1002 15
2007/09 001 2 2002 12
2007/09 002 3 3001 18


然后利用查询出来的结果集中的每条数据来对在库管理表进行更新操作
比如依次将
fDateMonth=’ 2007/09’, objectNo=’ 1001’, storgeNo=’001’,objetcCountNum=8
fDateMonth=’ 2007/09’, objectNo=’ 1002’, storgeNo=’001’,objetcCountNum=15
fDateMonth=’ 2007/09’, objectNo=’ 2002’, storgeNo=’001’,objetcCountNum=12
…插入在库管理表。

这里就是要遍历第一次查询出来的所有结果集,对其中每条记录进行操作。除了用游标有没有其他更好的办法


谢谢了。。。

17,137

社区成员

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

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