100分求助:在ORACLE中如何打印表名,主健字段名,外键字段名和统计主健最大值?

kto 2005-06-22 02:31:10
各位高手,遇到一个棘手的问题,100分求助!

我想把数据库里的所有表名和表中的主健字段名,外键字段名,以及主健的最大值显示出来(DBMS_OUTPUT_LINE)

怎么写这个PL-SQL过程?或者SQL语句

数据库用的是ORACLE

最终结果打印形式如下:

表名 主健字段名 外键字段名 主健最大值
usertable userid addressid 321
addresstable addressid telid 998

需要统计的一共有210张表,一个一个统计实在是比较愚蠢的方法,以前记得ORACLE里有个系统表专门保存所有表的信息,请各位高手赐教!
...全文
142 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tongls 2005-06-22
  • 打赏
  • 举报
回复
不是有V$....什么表来定义的吗?? 怎么没有呢?? 郁闷。。。。。。
bzszp 2005-06-22
  • 打赏
  • 举报
回复
上面只处理了 主键和外键 只有一个的情况
多个的话,修改一下程序即可。
bzszp 2005-06-22
  • 打赏
  • 举报
回复
没有主键的 主健最大值 输出 为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 0

PL/SQL 过程已成功完成。

已用时间: 00: 00: 00.30
SQL>
bobfang 2005-06-22
  • 打赏
  • 举报
回复
如果主健不是一个字段的话,主健最大值就不太好取
chenbf_sz 2005-06-22
  • 打赏
  • 举报
回复
使用存储过程、动态SQL语句、以及数据字典 user_constraints (当前用户约束定义表、含主键、外键、唯一键)、user_cons_columns (约束定义的列)获得你需要的统计。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧