日期:2014-05-17  浏览次数:20855 次

急,小弟求个简单存储过程,谢谢
小弟求个存储过程

有2个表 A,B,
基本就是在A表查询满足条件的数据插入到B表里。

1. select name,dept from A where dept=01

2. insert into B(name,dept) values(name,dept)

这个从A表取出值在循环插入B表的存储过程怎么写?另外B主键不是自增的(不能改),那我怎么插入主键啊,
这样的存储过程怎么写?谢谢

------解决方案--------------------
不用存储过程,一句话就可以:
insert into B(name,dept) select name,dept from A where dept=01;
------解决方案--------------------
B表的字段结构是什么,主键有什么要求和有什么限制?
如果两个表结构一样,为何还要插入B表?

------解决方案--------------------
探讨
A,B 两个表肯定不一样了,B表主键没做自增和sequence,我们WEB程序取主键是封装了 SELECT MAX(ID) FROM XX 来定义主键的
做成存储过程就是为了叫ORALCE每周一个时间调用它更新B表


还有个问题,假如 我在B上建立sequence,初始为1,WEB程序上 SELECT MAX(ID) FROM XX 在加1 插入数据 ,主键为2了,这时候在用sequence,得到的主键是2 还是3?

------解决方案--------------------
探讨
A,B 两个表肯定不一样了,B表主键没做自增和sequence,我们WEB程序取主键是封装了 SELECT MAX(ID) FROM XX 来定义主键的

------解决方案--------------------
其实通过触发器和SEQUENCE很容易就能实现的功能,为什么要搞的这么麻烦呢?还要“SELECT MAX(ID) FROM XX 在加1",其实根本就没有必要
------解决方案--------------------
用SEQUENCE吧,别浪费资源了,另外,楼上有人对SEQUENCE理解好像有误,你用的时候注意下
------解决方案--------------------
insert into B(id,name,dept) 
select 
(select (nvl(max(id),0)+rownum from b),
name,
dept 
from A where dept=01;