Oracle按日期范围分区建表报错(缺失左括号)求解决方案
问题解决:Oracle建表语句“缺失左括号”错误修正
错误原因分析
你的语句存在两个核心语法问题:
- 分区定义语法错误:Oracle中使用
CREATE TABLE AS SELECT(CTAS)创建分区表时,所有分区定义必须包裹在同一个左、右括号内,你当前每个分区单独用括号的写法不符合语法规范,这是触发“缺失左括号”错误的直接原因。 - 分区名重复:存在两个名为
TRANSACTION_05的分区,违反对象命名唯一性规则。
修正后的建表语句
CREATE TABLE TMP_WRK_KYC_RPT_FINAL PARTITION BY RANGE (T_DATE_DESC) INTERVAL (NUMTOYMINTERVAL (1,'MONTH')) ( PARTITION TRANSACTION_01 VALUES LESS THAN (TO_DATE('01-FEB-2023','DD-MON-YYYY')), PARTITION TRANSACTION_02 VALUES LESS THAN (TO_DATE('01-MAR-2023','DD-MON-YYYY')), PARTITION TRANSACTION_03 VALUES LESS THAN (TO_DATE('01-APR-2023','DD-MON-YYYY')), PARTITION TRANSACTION_04 VALUES LESS THAN (TO_DATE('01-MAY-2023','DD-MON-YYYY')), PARTITION TRANSACTION_05 VALUES LESS THAN (TO_DATE('01-JUN-2023','DD-MON-YYYY')), PARTITION TRANSACTION_06 VALUES LESS THAN (TO_DATE('01-JUL-2023','DD-MON-YYYY')) ) AS SELECT /*+PARALLEL(20)*/ * FROM PROD.WRK_KYC_RPT_FINAL;
关键修改点说明
- 将所有分区定义合并到一对括号内,分区之间用逗号分隔。
- 把最后一个重复的
TRANSACTION_05分区名改为TRANSACTION_06,保证命名唯一。 - 调整了语句结构,将
PARTITION BY等分区相关子句放在AS SELECT之前,这是Oracle CTAS创建分区表的标准语法顺序。
内容的提问来源于stack exchange,提问作者Axay
相关产品推荐
相关产品推荐

