2008年8月19日星期二

关于数据库内容分析

  最近做一项目,需要分析原系统的表结构,由于表很多,而且表名也不规范,当然更没有什么文档说明了,虽然可以通过程序看到数据结果,但无法与数据库中的表名和字段名对应。要从众多的表中,找到自己需要的表,没有好的方法,就十分麻烦,不知在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;

0 comments:

发表评论

 
Friend JXKJ EAMPUB NIU-B China
CopyRight 2007-2009 WMZSOFT QQ