使用存储过程、动态SQL语句、以及数据字典 user_constraints (当前用户约束定义表、含主键、外键、唯一键)、user_cons_columns (约束定义的列)获得你需要的统计。
解决方案 »
- Win 7 + 64位的Oracle数据库 + 32位的Oracle客户端, PLSQL没有“登录为“选项
- 求救,如何通过命令行的形式查看表空间大小?
- 求教一个sql语句,似乎有点复杂
- 在线等待高手相助: 启动时提示出错:ORA-00064: object is too large to allocate on this O/S(1,4800000)
- form出了点问题,高手给指点下!
- 老话题, 关于数据库三范式
- 紧急救命!
- 如何避免死锁
- 有关DEVELOPER/2000中建树的问题
- 如何给多个变量赋值?
- 关于数据转出的问题。
- 如何从一个存储过程返回所调用的另一个存储过程的返回值(汗!有点绕口,有兴趣的请进,在线等)
没有外键的 输出空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>