可以通过 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/