目前有一个需求是这样的:
源表 :table1,table2,table3,table4...
备份表:table1bak,table2bak,table3bak,table4bak...
其中每个备份表都比相应源表多了2个相同的字段如:
table1表里有很多用户资料。为资料源表,主关键字段为s,(各个表的关键字段,另有表记录)
table1bak表里也有用户资料,为备份表,主关键字段为s,
多的字段为caseID,batchID恢复: 按CASEID恢复,则把table1bak表里的CASEID字段对应的记录
取出来,删除table1里相同s的那条记录,然后把从table1bak里取出来的资料插到table1目前的实现:
目前的最笨的办法就是每一个表写一个SQL来进行备份恢复,(每个表的字段不一样^:^)
但是扩张性很差,而且单张表的字段就很多,工作量也非常大。
目前的考虑:
现在就是考虑能不能写一个通用的,不用把每一个字段都写出来的实现方式呢?
源表 :table1,table2,table3,table4...
备份表:table1bak,table2bak,table3bak,table4bak...
其中每个备份表都比相应源表多了2个相同的字段如:
table1表里有很多用户资料。为资料源表,主关键字段为s,(各个表的关键字段,另有表记录)
table1bak表里也有用户资料,为备份表,主关键字段为s,
多的字段为caseID,batchID恢复: 按CASEID恢复,则把table1bak表里的CASEID字段对应的记录
取出来,删除table1里相同s的那条记录,然后把从table1bak里取出来的资料插到table1目前的实现:
目前的最笨的办法就是每一个表写一个SQL来进行备份恢复,(每个表的字段不一样^:^)
但是扩张性很差,而且单张表的字段就很多,工作量也非常大。
目前的考虑:
现在就是考虑能不能写一个通用的,不用把每一个字段都写出来的实现方式呢?
多出来的字段,这么说吧
table A (id, name, other)
数据:
1, 'abc', null
2, 'bcd', 'info'
3, ..., ... ...
table A_bak (id, name, other, caseid)
数据:
2, 'bcd', 'oldinfo', 19828 ....
比如我要恢复caseid为19828的记录,也就是在table A_bak中,找到caseid == 19828的那些记录而table A 和tableA_bak有同样的主关键字id,caseid == 19828对应的主关键字为2,因此从源表A中,删除id == 2的记录,将A_bak表里id == 2 的记录插入到A中去
定一个作业存储过程中定义一个 %rowtype别变量
如
p_data person%rowtype;
type p_cursor is ref cursor;
c1 p_cursor;fetch c1 into p_data;
列名可以用user_tab_columns表来获取,
我想用map来转存每个字段对应的值--恢复的话就是转存 bak表的值
然后再将对应的值插入到原表。
如map<string,?> ?应该是什么呢?可以存入任何数据类型?
既然你都去user_tab_columns表检索了,那就把他们的类型一起拿出来。用自己编辑SQL的方式的话,就是要通过自己得到的列的类型来判断,是不是需要用上引号,或者to_date函数等等。