[20120215]显示统计信息的最大最小值.txt

昨晚,看了一些统计信息的内容,由于里面的信息是RAW datatypes.看了别人写的代码,转换对应的数值:

http://structureddata.org/2007/10/16/how-to-display-high_valuelow_value-columns-from-user_tab_col_statistics/

create or replace function display_raw (rawval raw, type varchar2)
return varchar2
is
   cn     number;
   cv     varchar2(32);
   cd     date;
   cnv    nvarchar2(32);
   cr     rowid;
   cc     char(32);
begin
   type=substr(type,1,9)
   if (type = 'NUMBER') then
      dbms_stats.convert_raw_value(rawval, cn);
      return to_char(cn);
   elsif (type = 'VARCHAR2') then
      dbms_stats.convert_raw_value(rawval, cv);
      return to_char(cv);
   elsif (type = 'DATE') then
      dbms_stats.convert_raw_value(rawval, cd);
      return to_char(cd);
   elsif (type = 'NVARCHAR2') then
      dbms_stats.convert_raw_value(rawval, cnv);
      return to_char(cnv);
   elsif (type = 'ROWID') then
      dbms_stats.convert_raw_value(rawval, cr);
      return to_char(cnv);
   elsif (type = 'CHAR') then
      dbms_stats.convert_raw_value(rawval, cc);
      return to_char(cc);
   else
      return 'UNKNOWN DATATYPE';
   end if;
end;
/
select
   a.column_name,
   display_raw(a.low_value,b.data_type) as low_val,
   display_raw(a.high_value,b.data_type) as high_val,
   b.data_type
from
   dba_tab_col_statistics a, dba_tab_cols b
where
   a.owner = b.owner
   a.table_name='FOO' and
   a.table_name=b.table_name and
   a.column_name=b.column_name
/

http://mwidlake.wordpress.com/2010/02/24/update-to-decoding-high-and-low-values/
-- col_stats
-- Martin Widlake mdw 21/03/2003
-- MDW 11/12/09 enhanced to include more translations of low_value/high_value
-- pilfered from Gary Myers blog
-- MDW 20/02/10 added in the handling of timestamps.
col owner        form. a6 word wrap
col table_name   form. a15 word wrap
col column_name  form. a22 word wrap
col data_type    form. a12
col M            form. a1
col num_vals     form. 99999,999
col dnsty        form. 0.9999
col num_nulls    form. 99999,999
col low_v        form. a30
col low_v2       form. a18
col hi_v         form. a30
col data_type    form. a10
col low_value    form. a25
col high_value   form. a25
set lines 110
break on owner nodup on table_name nodup
spool col_stats.lst
select --owner
--      ,table_name
      column_name
      ,data_type
      ,decode (nullable,'N','Y','N')  M
      ,num_distinct num_vals
      ,num_nulls
      ,density dnsty
,decode(substr(data_type,1,9) -- as there are several timestamp types
  ,'NUMBER'       ,to_char(utl_raw.cast_to_number(low_value))
  ,'VARCHAR2'     ,to_char(utl_raw.cast_to_varchar2(low_value))
  ,'NVARCHAR2'    ,to_char(utl_raw.cast_to_nvarchar2(low_value))
  ,'BINARY_DO',to_char(utl_raw.cast_to_binary_double(low_value))
  ,'BINARY_FL' ,to_char(utl_raw.cast_to_binary_float(low_value))
  ,'DATE',rtrim(
               to_char(100*(to_number(substr(low_value,1,2),'XX')-100)
                      + (to_number(substr(low_value,3,2),'XX')-100),'fm0000')||'-'||
               to_char(to_number(substr(low_value,5,2),'XX'),'fm00')||'-'||
               to_char(to_number(substr(low_value,7,2),'XX'),'fm00')||' '||
               to_char(to_number(substr(low_value,9,2),'XX')-1,'fm00')||':'||
               to_char(to_number(substr(low_value,11,2),'XX')-1,'fm00')||':'||
               to_char(to_number(substr(low_value,13,2),'XX')-1,'fm00'))
  ,'TIMESTAMP',rtrim(
               to_char(100*(to_number(substr(low_value,1,2),'XX')-100)
                      + (to_number(substr(low_value,3,2),'XX')-100),'fm0000')||'-'||
               to_char(to_number(substr(low_value,5,2),'XX'),'fm00')||'-'||
               to_char(to_number(substr(low_value,7,2),'XX'),'fm00')||' '||
               to_char(to_number(substr(low_value,9,2),'XX')-1,'fm00')||':'||
               to_char(to_number(substr(low_value,11,2),'XX')-1,'fm00')||':'||
               to_char(to_number(substr(low_value,13,2),'XX')-1,'fm00')
              ||'.'||to_number(substr(low_value,15,8),'XXXXXXXX')  )
       ) low_v
,decode(substr(data_type,1,9) -- as there are several timestamp types
  ,'NUMBER'       ,to_char(utl_raw.cast_to_number(high_value))
  ,'VARCHAR2'     ,to_char(utl_raw.cast_to_varchar2(high_value))
  ,'NVARCHAR2'    ,to_char(utl_raw.cast_to_nvarchar2(high_value))
  ,'BINARY_DO',to_char(utl_raw.cast_to_binary_double(high_value))
  ,'BINARY_FL' ,to_char(utl_raw.cast_to_binary_float(high_value))
  ,'DATE',rtrim(
               to_char(100*(to_number(substr(high_value,1,2),'XX')-100)
                      + (to_number(substr(high_value,3,2),'XX')-100),'fm0000')||'-'||
               to_char(to_number(substr(high_value,5,2),'XX'),'fm00')||'-'||
               to_char(to_number(substr(high_value,7,2),'XX'),'fm00')||' '||
               to_char(to_number(substr(high_value,9,2),'XX')-1,'fm00')||':'||
               to_char(to_number(substr(high_value,11,2),'XX')-1,'fm00')||':'||
               to_char(to_number(substr(high_value,13,2),'XX')-1,'fm00'))
  ,'TIMESTAMP',rtrim(
               to_char(100*(to_number(substr(high_value,1,2),'XX')-100)
                      + (to_number(substr(high_value,3,2),'XX')-100),'fm0000')||'-'||
               to_char(to_number(substr(high_value,5,2),'XX'),'fm00')||'-'||
               to_char(to_number(substr(high_value,7,2),'XX'),'fm00')||' '||
               to_char(to_number(substr(high_value,9,2),'XX')-1,'fm00')||':'||
               to_char(to_number(substr(high_value,11,2),'XX')-1,'fm00')||':'||
               to_char(to_number(substr(high_value,13,2),'XX')-1,'fm00')
              ||'.'||to_char(to_number(substr(high_value,15,8),'XXXXXXXX')))
  ,  high_value
       ) hi_v
,low_value,high_value
from dba_tab_columns
where owner      like upper('&tab_own')
and   table_name like upper(nvl('&tab_name','WHOOPS')||'%')
ORDER BY owner,table_name,COLUMN_ID
/
clear colu
spool off
clear breaks

第1个链接不支持许多类型比如timestamp,自己参照第1个例子做了一些修改:
第2个链接还原timestamp最大值时的尾数部分写错,应该是原作者to_char(to_number(substr(high_value,15,8),'XXXXXXXX'))。
utl_raw.cast_to_binary_double(rawval)返回的是负数,前面加一个负号才正确!还有如果double,float为负数的话,转化还存在问题,我不知道现在问题在那里?不过这种类型的数据在实践中使用很少。

create or replace function display_raw (rawval raw, data_type varchar2)
return varchar2
is
   cn     number;
   cv     varchar2(32);
   cd     date;
   ct     timestamp(6);
-- cnv    nvarchar2(32);
   cr     rowid;
   cc     char(32);
   db     BINARY_DOUBLE;
   type1   varchar2(32);
begin
   type1 := substr(data_type,1,9);
   if (type1 = 'NUMBER') then
      dbms_stats.convert_raw_value(rawval, cn);
      return to_char(cn);
   elsif (type1 = 'VARCHAR2') then
      dbms_stats.convert_raw_value(rawval, cv);
      return to_char(cv);
   elsif (type1 = 'DATE') then
      dbms_stats.convert_raw_value(rawval, cd);
       return to_char(cd);
   elsif (type1 = 'TIMESTAMP') then
      dbms_stats.convert_raw_value(rawval, cd);
      return to_char(cd)||'.'||to_char(to_number(substr(rawval,15,8),'XXXXXXXX'));
   elsif (type1 = 'NVARCHAR2') then
      return to_char(utl_raw.cast_to_nvarchar2(rawval));
      --dbms_stats.convert_raw_value(rawval, cnv);
      --return to_char(cnv);
   elsif (type1 = 'ROWID') then
      dbms_stats.convert_raw_value(rawval, cr);
      return to_char(cr);
   elsif (type1 = 'CHAR') then
      dbms_stats.convert_raw_value(rawval, cc);
      return to_char(cc);
   elsif (type1 = 'BINARY_DO') then
      return to_char(-utl_raw.cast_to_binary_double(rawval));
      --dbms_stats.convert_raw_value(rawval, db);
      --return to_char(db);
   elsif (type1 = 'BINARY_FL') then      
      return to_char(-utl_raw.cast_to_binary_float(rawval));
   else
      return 'UNKNOWN DATATYPE';
   end if;
end;
/

时间: 2024-07-30 10:49:32

[20120215]显示统计信息的最大最小值.txt的相关文章

[20130918]12C表统计信息的在线收集.txt

[20130918]12C表统计信息的在线收集.txt 在12c以前,如果使用ctas建立表,并不会自动收集表的统计信息,12c开始CTAS和IAS操作会收集统计信息.但是不收集直方图信息.以及索引统计. 摘要:twp-bp-for-stats-gather-12c-1967354.pdfBest Practices for Gathering Optimizer Statistics with Oracle Database 12c P16-17页: Online statistics gat

在ASP.NET 2.0中操作数据之十五:在GridView的页脚中显示统计信息_自学过程

导言 除了需要了解产品的单价.库存量和订货量,并按等级排序之外,用户可能还对统计信息感兴趣,比如说平均价格.库存总量等等.这些统计信息常常显示在报表最下面的一个统计行中.GridView控件可以含有一个页脚行,我们可以通过编程将统计数据插入到它的单元格里面去.这个任务给了我们以下3个挑战: 1.配置GridView以显示它的页脚行 2.确定统计数据.即我们应该如何计算平均价格还有库存总量? 3.将统计信息插入到页脚行的相应的单元格中 在本节教程中,我们将会看到如何去征服这些挑战.另外呢,我们将创

[20151226]统计信息的保存时间.txt

[20151226]统计信息的保存时间.txt --前一阵子写了一篇审计统计分析的文章 --链接:http://blog.itpub.net/267265/viewspace-1870823/ --里面提到:视图记录了分析的历史记录DBA_TAB_STATS_HISTORY;,我提到保存1个月. --可以查询SYS.OPTSTAT_HIST_CONTROL$视图. SYS@test> select sname,sval1,sval2 from SYS.OPTSTAT_HIST_CONTROL$

ASP.NET 2.0数据教程之十五:在GridView的页脚中显示统计信息

返回"ASP.NET 2.0数据教程目录" 导言 除了需要了解产品的单价.库存量和订货量,并按等级排序之外,用 户可能还对统计信息感兴趣,比如说平均价格.库存总量等等.这些统计信息常 常显示在报表最下面的一个统计行中.GridView控件可以含有一个页脚行,我们 可以通过编程将统计数据插入到它的单元格里面去. 这个任务给了我们以 下3个挑战: 1.配置GridView以显示它的页脚行 2.确 定统计数据.即我们应该如何计算平均价格还有库存总量? 3.将统 计信息插入到页脚行的相应的单元

使用 atmadm 来显示 ATM 适配器上传入和传出呼叫的统计信息_DOS/BAT

Atmadm ATM 呼叫管理器在异步传输模式 (ATM) 网络上注册的监视器连接和地址.可以使用 atmadm 来显示 ATM 适配器上传入和传出呼叫的统计信息.如果在不含参数的情况下使用,则 atmadm 将显示监视活动 ATM 连接状态的统计信息. 语法 atmadm [/c][/a] [/s] 参数 /c  显示有关到在此计算机上安装的 ATM 网卡的所有当前连接的呼叫信息.  /a  显示安装在该计算机中的每个适配器的注册 ATM 网络服务访问点 (NSAP) 地址.  /s  显示监

第十二章——SQLServer统计信息(1)——创建和更新统计信息

原文:第十二章--SQLServer统计信息(1)--创建和更新统计信息 简介: 查询的统计信息: 目前为止,已经介绍了选择索引.维护索引.如果有合适的索引并实时更新统计信息,那么优化器会选择有用的索引供查询之用,因为SQLServer优化器是基于开销的优化.当在where和on上的列上的数据需要显示在结果集的时候,如果有实时的统计信息,优化器会选择最好的执行方式,因为优化器会从统计信息中获得这些数据的明细情况. 在创建索引的时候,SQLServer就会在索引列上创建统计信息.简单来说,统计信息

[20151214]显示统计分析的最大与最小值

[20151214]显示统计分析的最大与最小值.txt --昨天看了一个链接: http://www.pythian.com/blog/oracle-internal-datatype-storage/ col low_value format a20 col high_value format a20 col table_name format a10 head 'TABLE' col data_type format a20 col column_name format a6 head 'C

在Word2007中显示可读性统计信息

  用户可以通过可读性统计信息了解Word2007文档中包含的字符数.段落数.句子数等信息,以便了解该篇文档的阅读难易程度.在Word2007中显示可读性统计信息的步骤如下所述: 第1步,打开Word2007文档窗口,依次单击Office按钮→"Word选项"按钮,如图1所示. 图1 单击"Word选项"按钮 第2步,在打开的"Word选项"对话框中切换到"校对"选项卡,然后在"在Word中更正拼写和语法时"

[20151202]表统计信息stale百分比.txt

[20151202]表统计信息stale百分比.txt --昨天被别人问及一个问题缺省如果某个表修改信息超过10%,oracle即认为这个表需要重新统计分析. --这个百分比如何计算的,实际上只要自己仔细观察就可以确定oracle如何算的. 1.环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ --------------