最近做一项目,需要分析原系统的表结构,由于表很多,而且表名也不规范,当然更没有什么文档说明了,虽然可以通过程序看到数据结果,但无法与数据库中的表名和字段名对应。要从众多的表中,找到自己需要的表,没有好的方法,就十分麻烦,不知在Oracle中是否有通过一个知道的值,查找对应的表名和字段名的功能。不管Oracle是否有这样的功能,咱自己做一个也不复杂,下面就是一个小小示例,可以完成,从已知的内容,查找到表名和字段名:
declare
-- Local variables here
searchText varchar2(100) default '要查找的内容';
i integer;
msql varchar2(4000);
fld varchar2(1000);
cursor ctab is
select tname from tab where tabtype='TABLE';
cursor ctabcol(tn varchar2) is
select table_name,column_name
from user_tab_columns
where data_type='VARCHAR2' and data_length>nvl(length(searchText),1)
and table_name=tn;
begin
for ct in ctab loop
msql:='select count(1) from '|| ct.tname;
execute immediate msql into i;
if i>0 then
fld:='';
for ctc in ctabcol(ct.tname) Loop
fld:=fld||'||'||ctc.column_name;
end Loop;
begin
if nvl(length(fld),0)>3 then
msql :='select count(1) from '|| ct.tname || ' where '|| substr(fld,3) || ' like ''%'||searchText||'%''';
execute immediate msql into i;
if i>0 then
dbms_output.put_line(ct.tname);
end if;
end if;
Exception When Others Then
dbms_output.put_line(msql);
end ;
end if;
end loop;
end;
2008年8月19日星期二
关于数据库内容分析
订阅:
博文评论 (Atom)
0 comments:
发表评论