现在需要一个存储过程,表名作为一个参数输入,每个SSFJ字段有6月,7月的记录,判断每个单位,6月 和 7月的数据是否一致,每个字段都要判断,因为是表名是参数,所以判断的列也要从系统表里获取,
除了SSFJ,SBSJ不用判断以外,其它都要判断
结果存放到一个表里,全部一样,true,如果不一样,反馈字段名字,
下面是一个例子create table ZFTANG_TEST_01
(
  SSFJ VARCHAR2(50),--所属单位
  SBSJ VARCHAR2(50),--时间
  SL1  NUMBER,
  SL2  NUMBER,
  SL3  NUMBER
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );prompt Disabling triggers for ZFTANG_TEST_01...
alter table ZFTANG_TEST_01 disable all triggers;
prompt Deleting ZFTANG_TEST_01...
delete from ZFTANG_TEST_01;
commit;
prompt Loading ZFTANG_TEST_01...
insert into ZFTANG_TEST_01 (SSFJ, SBSJ, SL1, SL2, SL3)
values ('1', '201107', 1, 1, 1);
insert into ZFTANG_TEST_01 (SSFJ, SBSJ, SL1, SL2, SL3)
values ('2', '201107', 1, 1, 1);
insert into ZFTANG_TEST_01 (SSFJ, SBSJ, SL1, SL2, SL3)
values ('3', '201107', 2, 2, 2);
insert into ZFTANG_TEST_01 (SSFJ, SBSJ, SL1, SL2, SL3)
values ('4', '201107', 3, 3, 3);
insert into ZFTANG_TEST_01 (SSFJ, SBSJ, SL1, SL2, SL3)
values ('5', '201107', 4, 4, 4);
insert into ZFTANG_TEST_01 (SSFJ, SBSJ, SL1, SL2, SL3)
values ('1', '201106', 1, 2, 1);
insert into ZFTANG_TEST_01 (SSFJ, SBSJ, SL1, SL2, SL3)
values ('2', '201106', 1, 1, 1);
insert into ZFTANG_TEST_01 (SSFJ, SBSJ, SL1, SL2, SL3)
values ('3', '201106', 2, 2, 2);
insert into ZFTANG_TEST_01 (SSFJ, SBSJ, SL1, SL2, SL3)
values ('4', '201106', 3, 3, 3);
insert into ZFTANG_TEST_01 (SSFJ, SBSJ, SL1, SL2, SL3)
values ('5', '201106', 4, 4, 5);
commit;

解决方案 »

  1.   

    create or replace procedure pro_zswang(table_name_1 in varchar) is  vol_sql varchar2(20000); ------列SQL
      v_num   number; ------数量begin
      execute immediate '
    for cursor in (select ssfj  from table_name_1)
    loop
        select wmsys.wm_concat(column_name) into vol_sql
      from user_tab_columns t where ssfj =  cursor.ssfj
     and   T.COLUMN_NAME <> ''SBSJ''
       AND table_name = upper(''zswang_test_01'') and (SBSJ =to_char(sysdate,''yyyymm'') or SBSJ =to_char(sysdate,''yyyymm'') ;
       
       
     with a as (select vol_sql from table_name_1 )
      select distinct vol_sql into  v_num from a group by vol_sql;
       
         insert into bd_log values(table_name_1,cursor.ssfj,v_num);
         commit;
       
    end loop;'
      
      ;
    end;