直方图中有low_value、high_value值,如果显示为10进制可以使用下面方法:
字符串
select utl_raw.cast_to_number(low_value) from dual;
declare n varchar2(2000);
begin
dbms_stats.convert_raw_value('100001',n);
dbms_output.put_line(n);
end;
/
时间类型转换
SQL> set serveroutput on
SQL> declare
v_x date;
v_result varchar2(400);
begin
dbms_stats.convert_raw_value('08080640033C04',v_x);
select to_char(v_x,'yyyy-mm-dd hh24:mi:ss') into v_result from dual;
dbms_output.put_line(v_result);
end;
/
declare
d date;
begin
dbms_stats.convert_raw_value (hextoraw('7876070A010101'), d);
dbms_output.put_line (d);
end;
/
通用转换function
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
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;
/
http://structureddata.org/2007/10/16/how-to-display-high_valuelow_value-columns-from-user_tab_col_statistics/
https://stackoverflow.com/questions/20462309/oracle-convert-raw-to-date-format
其他
查看分区表的high_value
CREATE OR REPLACE function long_2_varchar (
p_table_owner in DBA_TAB_PARTITIONS.table_owner%type,
p_table_name in DBA_TAB_PARTITIONS.table_name%type,
p_partition_name in DBA_TAB_PARTITIONS.partition_name%type)
return varchar2
as
l_high_value LONG;
begin
select high_value
into l_high_value
from DBA_TAB_PARTITIONS
where table_owner = p_table_owner
and table_name = p_table_name and partition_name = p_partition_name;
return substr( l_high_value, 1, 4000 );
end;
/
dum转换
SQL> select dump(1234,16) from dual;
DUMP(1234,16)
--------------------
Typ=2 Len=3: c2,d,23
SQL> set serveroutput on
SQL> declare n number;
begin
dbms_stats.convert_raw_value('c20d23',n);
dbms_output.put_line(n);
end;
/ 2 3 4 5 6
1234