可以通过 XX_TAB_COL ,TAB_COL_STATISTICS查询字段的low_value,high_value。该字段为RAW类型。
计算方式为在最小值基础上取DUMP,转换为16进制,取前32位数据,然后将逗号替换为0。
参考脚本如下:
点击(此处)折叠或打开
-
select trim(upper(replace(substr(dump(min(C_ID), 16, 0, 32),
-
instr(dump(min(C_ID), 16, 0, 32), ':', 1) + 1),
-
',',
-
'0'))) low_value,
-
trim(upper(replace(substr(dump(max(c_id), 16, 0, 32),
-
instr(dump(max(C_ID), 16, 0, 32), ':', 1) + 1),
-
',',
-
'0'))) high_value
- from temp_0830;
用如下自定义函数可以查看low_value,high_value的原始值
点击(此处)折叠或打开
-
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;
-
-
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
-
user_tab_col_statistics a, user_tab_cols b
-
where
-
a.table_name='table_name' and
-
a.table_name=b.table_name and
- a.column_name=b.column_name
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28963243/viewspace-2124182/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28963243/viewspace-2124182/
本文介绍了一种查询数据库中RAW类型字段的最小值和最大值的方法,并提供了一个自定义函数来展示这些值的原始形式。
402

被折叠的 条评论
为什么被折叠?



