各位:请耐心点哦,呵呵表tbl_phone_base 的字段phoneid、phone 数据有上千万
表tbl_phone_baseaaa 的字段 phoneid、phone 数据有上十万(子表)
根据phondid相等,要将表tbl_phone_baseaaa字段phone的数据更新到tbl_phone_base表的phone里面去,怎样写这个存储过程?
谢谢大家
表tbl_phone_baseaaa 的字段 phoneid、phone 数据有上十万(子表)
根据phondid相等,要将表tbl_phone_baseaaa字段phone的数据更新到tbl_phone_base表的phone里面去,怎样写这个存储过程?
谢谢大家
1\各表通过哪个字段(组合)能为一确定一条数据,例如主键,你没提供
2\你保证tbl_phone_baseaaa 的字段 phoneid在tbl_phone_base 都有对应,如果找不到对应的你怎么处理?
根本用不到存储过程,1个sql足够了
下述是把两表中有对应phoneid的更新
update tbl_phone_base
set phone=(select phone from tbl_phone_baseaaa where phoneid=tbl_phone_base.phoneid)
where exists(select 1 from tbl_phone_baseaaa where phoneid=tbl_phone_base.phoneid)
注意,因为大批量处理,执行更新前先做备份
多备份永远不是坏事
所言既是呀, 上面的sql就可以搞定你的要求了, 或者是,你需要procedure是有其他的考虑。
create or replace procedure update_phone as CURSOR C_all IS
SELECT phoneid,phone from tbl_phone_baseaaa; v_phone tbl_phone_baseaaa.phone%type;
v_phoneid tbl_phone_baseaaa.phoneid%type; begin
OPEN C_all;
LOOP
FETCH C_all INTO v_phoneid,v_phone;
EXIT WHEN C_all%NOTFOUND;
begin
update tbl_phone_base set phone=v_phone where phoneid=v_phoneid;
end;
END LOOP;
close C_all;
commit;
end update_phone;
/
这个也没有分批commit呀,应该不推荐你这样的写法,还不如sql
这个效率肯定很差!不推荐!还不如直接UPDATE
As
Select t1.phoneid, t2.phone From tbl_phone_base t1, tbl_phone_baseaaa t2 Where t1.phoneid = t2.phoneid;Truncate Table tbl_phone_base;Insert Into tbl_phone_base
Select * From tmp_table;
Commit;Drop Table tmp_table;