Chinaunix首页 | 论坛 | 博客
  • 博客访问: 519386
  • 博文数量: 101
  • 博客积分: 1635
  • 博客等级: 上尉
  • 技术积分: 1282
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-05 01:51
文章分类

全部博文(101)

文章存档

2019年(2)

2018年(16)

2013年(14)

2012年(69)

我的朋友

分类: Oracle

2013-01-15 13:48:18

create table t1 as select sql_text from v$sqlarea;
alter table t1 add sql_text_wo_constants varchar2(1000);

create or replace function remove_constants(p_query in varchar2)
  return varchar2 as
  l_query     long;
  l_char      varchar2(1000);
  l_in_quotes boolean default FALSE;
begin
  for i in 1 .. length(p_query) loop
    l_char := substr(p_query,i,1) ;
    if (l_char = '''' and l_in_quotes) then
      l_in_quotes := FALSE;
    elsif (l_char = '''' and NOT l_in_quotes) then
      l_in_quotes := TRUE;
      l_query     := l_query || '''#';
    end if;
    if (NOT l_in_quotes) then
      l_query := l_query || l_char;
    end if;
  end loop;
  l_query := translate(l_query, '0123456789', );
  for i in 0 .. 8 loop
    l_query := replace(l_query, lpad(, 10 - i, ), );
    l_query := replace(l_query, lpad(' ', 10 - i, ' '), ' ');
  end loop;
  return upper(l_query);
end;
/
update t1 set sql_text_wo_constants=remove_constants(sql_text);
select sql_text_wo_constants,count(*) from t1 group by sql_text_wo_constants having count(*) >100 order by 2
/

阅读(2279) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~