Oracle基于sysdate创建动态范围分区报ORA-14019的解决方法
Oracle基于sysdate动态创建区间分区报错ORA-14019的解决方案
首先排查你的代码中存在的基础错误:你定义的表字段为date_create,但分区键使用了不存在的字段sale_date,需要先将两者修正为一致的字段名。
报错原因
ORA-14019报错的核心是Oracle的分区边界规则限制:VALUES LESS THAN后的分区边界必须是静态字面量,不支持直接传入sysdate这类动态返回值的函数。
解决方案
有两种常用的实现方式可以满足你基于sysdate设置初始分区边界的需求:
方案1:使用PL/SQL动态SQL拼接建表语句
提前计算好sysdate-90的静态日期值,拼入建表语句中即可符合规则,代码示例:DECLARE -- 提前计算静态初始分区边界 v_initial_bound DATE := SYSDATE - 90; BEGIN EXECUTE IMMEDIATE ' CREATE TABLE partition_interval_demo ( id NUMBER(6), val VARCHAR2(50), date_create DATE ) PARTITION BY RANGE (date_create) INTERVAL (INTERVAL ''1'' DAY) ( PARTITION p1 VALUES LESS THAN (DATE '''||TO_CHAR(v_initial_bound,'YYYY-MM-DD')||''') )'; END; /执行后会自动以当前日期减90天作为初始分区的边界值,后续插入的新数据会自动按天生成新的区间分区。
方案2:设置固定早日期作为初始分区边界
如果你对初始分区的边界没有严格的对齐sysdate-90的要求,可以直接设置一个很早的固定日期作为初始分区边界,Oracle的interval分区机制会自动根据后续插入的数据生成对应日期的分区,无需手动维护,代码示例:CREATE TABLE partition_interval_demo ( id NUMBER(6), val VARCHAR2(50), date_create DATE ) PARTITION BY RANGE (date_create) INTERVAL (INTERVAL '1' DAY) ( PARTITION p1 VALUES LESS THAN (DATE '2020-01-01') );
内容的提问来源于stack exchange,提问作者Kanat Seytov
相关产品推荐
相关产品推荐

