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

简介: 昨晚,看了一些统计信息的内容,由于里面的信息是RAW datatypes.看了别人写的代码,转换对应的数值:http://structureddata.org/2007/10/16/how-to-display-high_valuelow_value-colum...
昨晚,看了一些统计信息的内容,由于里面的信息是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;
/

目录
相关文章
|
存储 缓存 分布式计算
Spark的Driver和Executor
Spark的Driver和Executor
1023 0
|
4月前
|
存储 缓存 分布式计算
StarRocks x Iceberg:云原生湖仓分析技术揭秘与最佳实践
本文将深入探讨基于 StarRocks 和 Iceberg 构建的云原生湖仓分析技术,详细解析两者结合如何实现高效的查询性能优化。内容涵盖 StarRocks Lakehouse 架构、与 Iceberg 的性能协同、最佳实践应用以及未来的发展规划,为您提供全面的技术解读。 作者:杨关锁,北京镜舟科技研发工程师
StarRocks x Iceberg:云原生湖仓分析技术揭秘与最佳实践
|
7月前
|
存储 弹性计算 人工智能
阿里云轻量应用服务器全球上新!
阿里云轻量应用服务器全球上新!
165 0
|
11月前
|
固态存储 开发者
阿里云服务器选购之国际版和国内版的平台对比及建议
阿里云服务器选购之国际版和国内版的平台对比及建议
|
存储 Java 大数据
Apache Arrow 新手上路
# 什么是Arrow [Apache Arrow](https://https://arrow.apache.org/)是一个开源的跨平台数据层开发框架,主要提供高效的、硬件加速的内存中数据计算能力。Apache Arrow的设计初衷是作为“新一代大数据系统的共享基础”,可以作为不同系统之间进行高效数据交换的媒介,同时提供快速、低延迟的数据访问接口。 Apache Arrow的主要目标是通过提
Apache Arrow 新手上路
|
SQL 存储 分布式计算
Iceberg原理和项目使用技巧
Iceberg原理和项目使用技巧
1396 0
|
移动开发 JavaScript 前端开发
【Vue2从入门到精通】零基础学习vue到底该如何上手
本文是为vue初学者整理的零基础快速上手vue的学习指南,希望能帮助到迷茫的你。
294 0
【Vue2从入门到精通】零基础学习vue到底该如何上手
|
SQL 分布式计算 Hadoop
Iceberg实战踩坑指南(一)
Iceberg实战踩坑指南
2196 0
|
小程序 安全 测试技术
浅谈 微信小程序 与 APP 应用的结合
浅谈 微信小程序 与 APP 应用的结合
646 0
|
Kotlin
Kotlin | 关于协程异常处理,你想知道的都在这里(下)
关于协程的异常处理,一直以来都不是一个简单问题。因为涉及到了很多方面,包括 异常的传递 ,结构化并发下的异常处理 ,异常的传播方式 ,不同的Job 等,所以常常让很多(特别是刚使用协程的,也不乏老手)同学摸不着头脑。
588 0
Kotlin | 关于协程异常处理,你想知道的都在这里(下)

热门文章

最新文章