在sys.dba_tab_columns视图中存在低值和高值问题,因为它们都显示错误的值。
我将此问题追溯到内核,该内核从x $ kxttstecs内核状态表中收集信息。 如何通过从多个用户的多个表中选择所有列的最小值/最大值/平均值来解决此问题? 还要使其自动更新为数据库统计视图吗? 您能帮我一个功能还是以某种方式修改内核状态表?
我有一个SQL代码:
SELECT
ROWNUM AS ROW_ID,
sys.dba_tab_columns.OWNER,
sys.dba_tab_columns.table_name AS TABLE_NAME,
sys.dba_tab_columns.column_name AS COLUMN_NAME,
decode(data_type, 'NUMBER', sys.dba_tab_columns.low_value,
NULL) AS LOW_VALUE,
decode(data_type, 'NUMBER', sys.dba_tab_columns.high_value,
NULL) AS HIGH_VALUE
FROM sys.dba_tab_columns
WHERE sys.dba_tab_columns.OWNER = 'HR' OR sys.dba_tab_columns.OWNER ='XY';
我从LOW_VALUE和HIGH_VALUE那里获得了不正确的数据。
TABLE_NAME | COLUMN_NAME | LOW_VALUE | HIGH_VALUE
DEPARTMENTS | DEPARTMENT_ID | C10B | C20347
EMPLOYEES | DEPARTMENT_ID | C10B | C2020B
JOB_HISTORY | DEPARTMENT_ID | C115 | C2020B
表中的实际值:
LOW_VALUE | HIGH_VALUE
10 | 270
10 | 110
20 | 110
答案 0 :(得分:0)
我现在才知道答案。由于内核统计信息以RAW数据类型收集此信息,因此为了获取正确的数据,我需要使用UTL_RAW.CAST_TO_NUMBER更改数据类型:
decode(data_type, 'NUMBER', UTL_RAW.CAST_TO_NUMBER(sys.dba_tab_columns.low_value),
NULL) AS LOW_VALUE,
decode(data_type, 'NUMBER', UTL_RAW.CAST_TO_NUMBER(sys.dba_tab_columns.high_value),
NULL) AS HIGH_VALUE