业务系统表格调研脚本

浏览: 2042

1.创建记录表格

CREATE TABLE "MC$MSG"
("OWNER" VARCHAR2(30),
"TABLE_NAME" VARCHAR2(30),
"MSG_ID" NUMBER,
"MSG_NAME" VARCHAR2(200),
"MSG" VARCHAR2(4000)) ;

 

 

2.生成打印的脚本内容,红色字体部分可替换

用于指定业务表格所在用户,并生成脚本内容

declare
N NUMBER;
v_indcount number;
v_indlist varchar2(4000);
strings varchar2(4000);
begin
execute immediate 'truncate table mc$msg';
for i in ( select owner,table_name from dba_tables
where owner in ('ZC')
ORDER BY OWNER,TABLE_NAME) LOOP
n:=0;
insert into mc$msg values(i.owner,i.table_name,n,'用户.表格',
'



');
 
n:=n+1;
insert into mc$msg values(i.owner,i.table_name,n,'说明','
');
 
n:=n+1;
strings:='';
for j in ( select b.column_name from dba_cons_columns b
where b.constraint_name=( select a.constraint_name from dba_constraints a
where a.OWNER=i.owner
and a.table_name=i.table_name
and a.constraint_type='P')
order by b.POSITION) loop
strings:=strings||','||j.column_name;
end loop;
strings:=substr(strings,2);
insert into mc$msg values(i.owner,i.table_name,n,'主键','
');
 
n:=n+1;
v_indlist:='
用 户'||i.owner||'表 名'||i.table_name||'
说 明'||'&'||'nbsp;
主 键'||nvl(strings,'&'||'nbsp;')||'

';
for x in (select index_name from dba_indexes where table_owner=i.owner and table_name=i.table_name order by index_name) loop
strings:='';
for y in (select column_name from dba_ind_columns where table_owner=i.owner and table_name=i.table_name and index_name=x.index_name order by column_position) loop
strings:=strings||','||y.column_name;
end loop;
v_indlist:=v_indlist||'
'||'
';
end loop;
v_indlist:=v_indlist||'
索引名索引字段
'||x.index_name||''||substr(strings,2)||'
';
select count(index_name) into v_indcount from dba_indexes where table_owner=i.owner and table_name=i.table_name ;
insert into mc$msg values(i.owner,i.table_name,n,'索引','索 引'||decode(v_indcount,0,'&'||'nbsp;',v_indlist)||'');
 
n:=n+1;
insert into mc$msg values(i.owner,i.table_name,n,'备注','备 注'||'&'||'nbsp;');
 
n:=n+1;
insert into mc$msg values(i.owner,i.table_name,n,'字段','字段名中文名类型可空备注');
 
for j in ( select ''||A.COLUMN_NAME||''||'&'||'nbsp;'||a.DATA_TYPE||'('||a.DATA_LENGTH||')'||''||decode(a.NULLABLE,'Y','--','N','NOT NULL')||''||nvl(b.comments,'&'||'nbsp;')||'' STR
from dba_tab_columns a,dba_col_comments b
where a.TABLE_NAME=b.table_name
and a.COLUMN_NAME=b.column_name
and a.OWNER=b.owner
AND A.OWNER=I.OWNER
and a.table_name=I.TABLE_NAME
ORDER BY A.COLUMN_ID) loop
strings:=j.str;
n:=n+1;
insert into mc$msg values(i.owner,i.table_name,n,'字段定义',strings);
end loop;
n:=n+1;
insert into mc$msg values(i.owner,i.table_name,n,'表格结束','
');
commit;
END LOOP;

 

--create sql script
--DBMS_OUTPUT.PUT_LINE('set markup html on entmap off') ;
DBMS_OUTPUT.PUT_LINE('set pagesize 0') ;
DBMS_OUTPUT.PUT_LINE('set serveroutput on size 800000') ;
DBMS_OUTPUT.PUT_LINE('set head off') ;
DBMS_OUTPUT.PUT_LINE('set feedback off') ;
DBMS_OUTPUT.PUT_LINE('set echo off') ;
DBMS_OUTPUT.PUT_LINE('set long 9999') ;
DBMS_OUTPUT.PUT_LINE('set linesize 9999') ;
DBMS_OUTPUT.PUT_LINE('col msg format a9999') ;
DBMS_OUTPUT.PUT_LINE('set trimout on') ;
DBMS_OUTPUT.PUT_LINE('set trimspool on') ;
DBMS_OUTPUT.PUT_LINE('spool E:\ZC.htm') ;
 
for i in ( select distinct owner,table_name from mc$msg
ORDER BY OWNER,TABLE_NAME) LOOP
DBMS_OUTPUT.PUT_LINE('exec dbms_output.put_line(chr(13));') ;
DBMS_OUTPUT.PUT_LINE('exec DBMS_OUTPUT.PUT_LINE('''||i.owner||'.'||i.table_name||''');') ;
DBMS_OUTPUT.PUT_LINE('select replace(wm_concat(msg),'','',chr(13)) msg from (select msg from mc$msg where owner='''||i.owner||''' and table_name='''||i.table_name||''' order by msg_id);');
END LOOP;
DBMS_OUTPUT.PUT_LINE('spool off') ;
--create finish
END;
/
 

 

3.将打印的结果拷贝到文本文件,后缀名改为.sql,红色字体部分可替换

之后再cmd下进入sqlplus,运行此sql脚本即可得到固定格式的数据字典信息

例如拷贝到e盘下,名为zc.sql

在cmd中

sqlplus "/ as sysdba"

SQL>@e:\zc.sql

 

等待完成即可

 

4.业务表格调研结果如下:

推荐 0
本文由 newkoa 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册