更新表:
a.存储过程中可以使用游标来更新数据表(游标中是一行一行读取数据并进行更新相关表)
游标使用例子:
定义游标:
CURSOR c_wt IS
SELECT serial_id, cmnd_id, send_time
FROM dl_entrustinfo
WHERE trust_id = v_p_pre_id
AND trust_type = '1'
and revoke_req = 'N' ;
使用游标中的数据
FOR r_wt IN c_wt
LOOP
END LOOP;
b.用SQL语句批量更新
方法1:更新表思路是这样的:首先按条件帅选要更新的数据(n条 n>=0),然后再查找要更新列的值(因为要更新n条记录,所以查找出来的值应该是n个,这样就能达到批量更新目的。
update dl_preentrust_detail d
set d.entrust_volume = (SELECT nvl(sum(nvl(e.trust_volume, 0) - nvl(e.revoke_volume, 0)),0)
FROM dl_entrustinfo e
WHERE e.trust_id = d.pre_id
AND e.revoke_req = 'N'
and e.cmnd_id = d.cmnd_id
)
where exists
(select *
from dl_entrustinfo ee
where d.pre_id = ee.trust_id
and d.cmnd_id = ee.cmnd_id
and ee.revoke_volume >0
方法2:这种更新方法是把原值和新值通过查询组合到一个视图中然后把新值赋给原字段上,这种方法多用于俩个表的字段一一对应情况下(新值通过简单的主键关联起来就可以得到)比较好用
update (select a.值,b.值 from a,b
where a.no=b.no)
set 原字段=新值;
复制表数据结构:
1. 复制表结构及其数据:
create table table_name_new as select * from table_name_old
2. 只复制表结构:
create table table_name_new as select * from table_name_old where 1=2;
或者:
create table table_name_new like table_name_old
3. 只复制表数据:
如果两个表结构一样:
insert into table_name_new select * from table_name_old
如果两个表结构不一样:
insert into table_name_new(column1,column2...) select column1,column2... from table_name_old