为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM Database Server x64 V8 1-4-6-2024.12.25-255012-20119-ENT
【操作系统】:kyliny V10(SP3)
【CPU】: Intel x86_64
【问题描述】*:
定义了查询分区大小的视图:
CREATE OR REPLACE VIEW get_table_sizes_by_prefix AS
SELECT
lower(p.table_name) || '_' ||
TO_CHAR(
TO_DATE(
-- 提取日期部分(兼容单引号包裹),注意:真实的表名需要日期减去一天
SUBSTR(p.high_value, INSTR(p.high_value, '''', 1, 1) + 1, 10),
'YYYY-MM-DD'
) - 1,
'YYYYMMDD'
) AS tablename,
s.BYTES / 1024 || ' KB' AS size
FROM
dba_tab_partitions p
JOIN
dba_segments s
ON p.table_owner = s.owner
AND p.table_name = s.segment_name
AND p.partition_name = s.partition_name
WHERE
REGEXP_SUBSTR(p.high_value, '\d{4}-\d{2}-\d{2}');
在使用视图查询时,如果不带where条件,查询正常:
select * from get_table_sizes_by_prefix;
如果根据tablename字段查询,报错:
select * from get_table_sizes_by_prefix where tablename like 'knowledgebase%';
错误信息:
做个试验,查询语句加个hint,看看是否能正常执行
select /*+ VIEW_FILTER_MERGING(1)*/* from get_table_sizes_by_prefix where tablename like 'knowledgebase%';
是不是定义小写表名了,表名加个双引号试试,不加双引号会自动转大写