使用存储过程、动态SQL语句、以及数据字典 user_constraints (当前用户约束定义表、含主键、外键、唯一键)、user_cons_columns (约束定义的列)获得你需要的统计。

解决方案 »

  1.   

    没有主键的 主健最大值 输出 为0
    没有外键的 输出空SQL> declare
      2  cursor c is select table_name from user_tables;
      3  v_pk varchar2(30);
      4  v_fk varchar2(30);
      5  v_maxnum number;
      6  num number;
      7  v_out varchar2(60);
      8  begin
      9  for cur in c loop
     10     v_out:=cur.table_name;
     11     select count(*) into num from user_cons_columns
     12     where table_name = cur.table_name
     13     and constraint_name like '%PK_%';
     14     if num>0 then
     15     select COLUMN_NAME into v_pk from user_cons_columns
     16     where table_name = cur.table_name
     17     and constraint_name like '%PK_%';
     18     v_out:=v_out||'  '||v_pk;
     19     execute immediate 'select max('||v_pk||') from '||cur.table_name into v_maxnum;
     20     else
     21     v_maxnum:=0;
     22     end if;
     23     select count(*) into num from user_cons_columns
     24     where table_name = cur.table_name
     25     and constraint_name like '%FK_%';
     26     if num>0 then
     27     select COLUMN_NAME into v_fk from user_cons_columns
     28     where table_name = cur.table_name
     29     and constraint_name like '%FK_%';
     30     v_out:=v_out||'  '||v_fk;
     31     end if;  
     32     v_out:=v_out||'  '||v_maxnum;
     33     dbms_output.put_line(v_out);
     34  end loop;
     35  end;
     36  /
    ACCOUNT  0
    BONUS  0
    DEPT  DEPTNO  40
    EMP  EMPNO  DEPTNO  7934
    RECEIPT  0
    SALGRADE  0
    T  0
    T2  0
    TA  0
    TB  0
    TB1  0
    TB2  0
    TEMP  0
    TEST  0
    TT  0
    T_TEST  0PL/SQL 过程已成功完成。已用时间:  00: 00: 00.30
    SQL>