求教,存储过程

[复制链接]
查看11 | 回复9 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
求教一个存储过程:
有N张业务表,其中因为以前数据库设计不恰当,导致出现很多GJZ值出现重复,
现在要去解决这些重复问题,然后update set gjz=seq_emp.nextval
要求用PROC实现
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
是否有不明白的地方?
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
顶起来
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
把表结构和例子数据都贴上来, 这样看起来方便些, 只让人“猜”的话够呛有人愿意帮你
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
终于有人说话了。
这个表结构和数据贴有点复杂。我描述一下需求
问题:比如说有5张表,都有字段GJZ,GJZ是唯一的,每张表每行的GJZ都不一样,原来是由系统生成的,但是由于数据库设计不当,造成这5张表里GJZ有了重复,现在要把他们找出来,根据MAX(ROWID) ORDER BY GJZ从序列里取值赋予。
但是要用PROC实现
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
老问题了
楼上的已经说了,用ROWID做,他是系统自带的行标识,可以唯一表示一条记录,用它就可以实现你需要的处理,举例子:
select* from Table a
where a.ROWID = (select MAX(b.ROWID)

from Table b

where b.table_id = a.table_id) ;
该语句可以取出table_id唯一的所有的记录,剩下的楼主应该会处理了吧。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
SQL会写存储过程肯定会了,建议楼主看以下存储过程的语法吧。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
to louis_xu
:
你的思路是好的,不过超过3张表呢?你的语句要怎么改变
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
可以先把所有的表用UNION ALL 的方式查询出来,然后对这个结果按ID进行GROUP BY,找出有重复的ID。
然后根据上述返回的结果进行循环,
  在循环体中,更新这张表中有存在该ID的数据
  (可以每张表都更新)
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
如果考虑性能的话,可以外面在套一个,每次只要取ROWID最大的那个来更新。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行