You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle数据库报ORA-14006错误:可查询分区但无法删除分区问题咨询

ORA-14006错误根因
  1. Oracle DDL语句中的分区名必须为静态标识符,不能直接使用concat()等函数动态拼接生成,也不能直接嵌套子查询返回分区名,不符合语法规则就会触发无效分区名错误。
  2. 你手写固定分区名仍然报错的原因是在分区名外多加了多余的括号,DROP PARTITION语法不需要用括号包裹分区名。
动态生成删分区语句的解决方案

如果需要结合调度工具传入的YYYYMMDD格式参数定时执行,最常用的方案是使用PL/SQL动态执行DDL:

DECLARE
    -- 调度工具传入的日期参数替换为你实际的变量名,格式为YYYYMMDD
    v_input_date VARCHAR2(8) := '20211011';
    v_partition_name VARCHAR2(30);
BEGIN
    -- 拼接生成分区名
    v_partition_name := 'P' || SUBSTR(v_input_date, 1, 6);
    -- 动态执行删分区DDL,UPDATE INDEXES避免本地主键失效
    EXECUTE IMMEDIATE 'ALTER TABLE schema.exampletab DROP PARTITION ' || v_partition_name || ' UPDATE INDEXES';
END;
/

如果担心分区名匹配不准,也可以结合系统视图查询确认后再执行,适配Oracle 11g及以上版本:

BEGIN
    FOR rec IN (
        SELECT partition_name
        FROM all_tab_partitions
        -- 注意:Oracle系统视图中所有者、表名默认大写存储,建表时没加双引号强制小写的话需要写大写匹配
        WHERE table_owner = 'SCHEMA'
          AND table_name = 'EXAMPLETAB'
          AND SUBSTR(partition_name, 2, 6) = SUBSTR('${调度工具传入的YYYYMMDD参数}', 1, 6)
    ) LOOP
        EXECUTE IMMEDIATE 'ALTER TABLE schema.exampletab DROP PARTITION ' || rec.partition_name || ' UPDATE INDEXES';
    END LOOP;
END;
/
常用分区操作示例
  • 静态查询指定分区数据
SELECT * FROM schema.exampletab PARTITION (P202110);
  • 按分区键查询(更推荐,无需关心分区名)
-- 替换为你实际的分区键字段即可
SELECT * FROM schema.exampletab WHERE create_time >= DATE '2021-10-01' AND create_time < DATE '2021-11-01';
  • 静态删除分区
ALTER TABLE schema.exampletab DROP PARTITION P202110 UPDATE INDEXES;
  • 静态截断分区(保留分区结构只删数据)
ALTER TABLE schema.exampletab TRUNCATE PARTITION P202110 UPDATE INDEXES;

内容的提问来源于stack exchange,提问作者Aite97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:45:05