将xtable计数与oracle过程中的表进行比较

时间:2014-03-20 20:38:25

标签: oracle stored-procedures for-loop

(我有几个表,每个table我都有相应的xtable

我想要做的是创建oracle过程,它将比较xtable和table之间的计数,

if (xtable >= table)
     do something...

    type namesarray IS VARRAY(5) OF VARCHAR2(10);
    tbl_names namesarray;
    xtbl_names namesarray;
    total integer;

    BEGIN
      tbl_names := namesarray('tbl1', 'tbl2', 'tbl3', 'tbl4');
      xtbl_names := namesarray('xtbl1', 'xtbl2', 'xtbl3', 'xtbl4');
      total := tbl_names.count;

    FOR i in (
       SELECT COUNT(*) as TBL_COUNTS FROM tbl_names(i);
       SELECT COUNT(*) as XTBL_COUNTS FROM xtbl_names(i)
    )
    LOOP
        IF(i.XTBL_COUNTS  >= i.TBL_COUNTS ) 
      THEN
      --  print to console
    END IF;
    END LOOP;

END;

这就是我到目前为止所做的一切。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

这个怎么样?

if (xtable >= table)
     do something...

    type namesarray IS VARRAY(5) OF VARCHAR2(10);
    tbl_names namesarray;
    xtbl_names namesarray;
    total integer;
    v_count_1 integer;
    v_count_2 integer;

    BEGIN
      tbl_names := namesarray('tbl1', 'tbl2', 'tbl3', 'tbl4');
      xtbl_names := namesarray('xtbl1', 'xtbl2', 'xtbl3', 'xtbl4');
      total := tbl_names.count;

    FOR i in (
       select 
          t1.table_name as tab_1_name, t2.table_name as tab_2_name
       from   ( select table_name from user_tables where table_name in (...) ) t1
             ,( select 'x'||table_name as table_name from user_tables where table_name in (...) ) t2
       where 'x'||t1.table_name = t2.table_name 
    )
    LOOP
        execute immediate 'select count(*) from '||i.tab_1_name into v_count_1;
        execute immediate 'select count(*) from '||i.tab_2_name into v_count_2;
        IF( v_count_1  >= v_count_2 ) 
      THEN
      --  print to console
    END IF;
    END LOOP;

END;