目前有一个需求是这样的:
源表  :table1,table2,table3,table4...
备份表:table1bak,table2bak,table3bak,table4bak...
其中每个备份表都比相应源表多了2个相同的字段如:
table1表里有很多用户资料。为资料源表,主关键字段为s,(各个表的关键字段,另有表记录)
table1bak表里也有用户资料,为备份表,主关键字段为s,
多的字段为caseID,batchID恢复: 按CASEID恢复,则把table1bak表里的CASEID字段对应的记录
取出来,删除table1里相同s的那条记录,然后把从table1bak里取出来的资料插到table1目前的实现:
    目前的最笨的办法就是每一个表写一个SQL来进行备份恢复,(每个表的字段不一样^:^)
   但是扩张性很差,而且单张表的字段就很多,工作量也非常大。
 
目前的考虑:
    现在就是考虑能不能写一个通用的,不用把每一个字段都写出来的实现方式呢?

解决方案 »

  1.   

    还没有写过触发器呢:)
    多出来的字段,这么说吧
    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中去 
      

  2.   

    写个存储过程
    定一个作业存储过程中定义一个 %rowtype别变量

    p_data person%rowtype;
    type p_cursor is ref cursor;
    c1 p_cursor;fetch c1 into p_data;
      

  3.   

    之前考虑的是C++程序实现,参数大概就是 表名,caseid(就是多余的字段),主关键字段)那存储过程估计也是用这几个字段了:)不好意思,楼上的能不能详细一点呢?
      

  4.   

    现在就是想用C++来实现,通过拼SQL的方式。
    列名可以用user_tab_columns表来获取,
    我想用map来转存每个字段对应的值--恢复的话就是转存 bak表的值
    然后再将对应的值插入到原表。
    如map<string,?>  ?应该是什么呢?可以存入任何数据类型?
      

  5.   

    你临时保存的值,都可以用String类型来保存。
    既然你都去user_tab_columns表检索了,那就把他们的类型一起拿出来。用自己编辑SQL的方式的话,就是要通过自己得到的列的类型来判断,是不是需要用上引号,或者to_date函数等等。