谢谢,您能进来看我的这个问题,不管结果怎样都很感谢。
表A、B,字段 : DT, X11,X12,X13,X14....X89,X99 (很多字段), 表B 就比 表A 多了分区 (DT)
维表 C,D 用来支持A、B表中字段的定义 X11、X12。。(X12 = 1 、 2 分别对应 C表的 1 ,和D表的 2) 
C 、D表中的定义也是会变动的(但是每天的数据会留有备份)。
所以 A表的 X11 的含义就可能和 B 表的 X11 意思不一样,也许会和 B 的X12是一样的意思。  现在我需要把A表的数据加到B表中。而且 我不能确定A、B表中究竟有哪些字段是有值的。
 对于同样意思的字段 ,B表中的数据就换成 A.a + B.a ,不一样的就加到 B表的 OTHER 中
A:           B:          最后 B:
   1           1                 1 :A.1+B.1
   2           3                 2 :A.2 
               OTHER             3 : B.3   能给个大体思路就十分感谢,当然要是有一些很重要的方法、函数 能提供就更谢谢了。。
                                   

解决方案 »

  1.   

    A: B: 最后 B:
    1 1 1 :A.1+B.1
    2 3 2 :A.2 
    OTHER 3 : B.3
     这个效果弄错了。。  应该是
          A : 1 ,2
         B : 1 ,3
    最后  B: 1 = A.1+B.1, 2=A.2  ,3 = b.3
      

  2.   

    但是每天的数据会留有备份光有备份不行,你应该把字段定义的改变过程另外存一张表,比如A的X11从C的1变成2,需要有表记录更改过程,这样才能追踪到最初哪个字段对应的哪个字段。建议根据每天的备份,来做一个这样的表,然后试着用sql或存储过程搞定。要不100天变了100次结构,那每天的备份都要去恢复一次岂不是很麻烦?个人意见,仅供参考
      

  3.   

    真是对不起大家,我没有描述清楚。 不过 目前思路我已经基本有了。
    但是有个困难的地方: 如何比较简单的确定一张表中 字段值 不是 null 的字段(PLSQL中)这个表的字段会比较多,一个一个写 就算了。
       另外 我说的备份时指,我每天都把维表的数据存在一张表中(带有时间,所以可以追踪到当天的字段所对应的含义)。
      当然还是很感谢 2L、3L 能来看看。呵呵
      

  4.   

    --打印表中不存在空值的字段名
    CREATE OR REPLACE PROCEDURE printcol(i_tablename VARCHAR2) IS
      cur           SYS_REFCURSOR;
      v_column_name VARCHAR2(40);
      cnt           PLS_INTEGER;
    BEGIN
      OPEN cur FOR 'select t.COLUMN_NAME from user_tab_columns t where t.TABLE_NAME=upper('''
                   || i_tablename || ''')';
      LOOP
        FETCH cur
          INTO v_column_name;
        EXIT WHEN cur%NOTFOUND;
        cnt := 0;
        EXECUTE IMMEDIATE 'select count(1) from ' || i_tablename || ' where ' || v_column_name ||
                          ' is null '
          INTO cnt;
        IF cnt = 0 THEN
          dbms_output.put_line(v_column_name);
        END IF;
      END LOOP;
    EXCEPTION
      WHEN OTHERS THEN
        NULL;
    END printcol;
    执行结果:
    SQL> set serveroutput on;
    SQL> exec printcol('test');
     
    ID
    TIME
     
    PL/SQL procedure successfully completed
     
    SQL>