谢谢,您能进来看我的这个问题,不管结果怎样都很感谢。
表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 能给个大体思路就十分感谢,当然要是有一些很重要的方法、函数 能提供就更谢谢了。。
表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 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
但是有个困难的地方: 如何比较简单的确定一张表中 字段值 不是 null 的字段(PLSQL中)这个表的字段会比较多,一个一个写 就算了。
另外 我说的备份时指,我每天都把维表的数据存在一张表中(带有时间,所以可以追踪到当天的字段所对应的含义)。
当然还是很感谢 2L、3L 能来看看。呵呵
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>