我想创建一个在按时间分区的表中添加新分区的过程。为此,我使用以下命令:
s_until := to_char(sysdate+1,' SYYYY-MM-DD HH24:MI:SS');
s_statement := 'ALTER TABLE '||s_table||' ADD PARTITION '||s_partition||' VALUES LESS THAN
(TO_DATE('''||s_until||''', ''SYYYY-MM-DD HH24:MI:SS'', ''NLS_CALENDAR=GREGORIAN''))
TABLESPACE '||s_tablespace;
execute immediate s_statement;
如您所见,我执行了不必要的日期转换。有人知道如何跳过这个肮脏的黑客吗?在没有转换的情况下执行这种方式会产生 ORA 错误。
s_statement := 'ALTER TABLE '||s_table||' ADD PARTITION '||s_partition||' VALUES LESS THAN
(sysdate+1) TABLESPACE '||s_tablespace;
execute immediate s_statement;
在 Oracle 9i 中没有办法绕过它。
如果您使用的是 11g,您可以将表定义为间隔分区以避免每天创建一个新分区。但这对您使用古老版本的 Oracle 没有帮助。