您确实使用 Oracle 11g 标签标记了问题;你真的会用吗?
这是一个 12c 的例子;如果一切正常,它工作:
SQL> create table labor_schedule_day_f as
2 select 1 id, 'Y' refresh_flag from dual union all
3 select 2 id, 'N' refresh_flag from dual;
Table created.
SQL> alter table labor_schedule_Day_f modify
2 partition by list (refresh_flag)
3 (partition refresh_flag_y values ('Y'),
4 partition refresh_flag_n values ('N')
5 );
Table altered.
您报告的错误意味着:
SQL> drop table labor_schedule_day_f;
Table dropped.
SQL> create table labor_schedule_day_f as
2 select 1 id, 'Y' refresh_flag from dual union all
3 select 2 id, 'N' refresh_flag from dual;
Table created.
插入REFRESH_FLAG 既不是Y 也不是N 的行(因此它违反您指定的规则):
SQL> insert into labor_schedule_day_f values (3, 'X');
1 row created.
使用与之前相同的 ALTER TABLE 语句:
SQL> alter table labor_schedule_Day_f modify
2 partition by list (refresh_flag)
3 (partition refresh_flag_y values ('Y'),
4 partition refresh_flag_n values ('N')
5 );
alter table labor_schedule_Day_f modify
*
ERROR at line 1:
ORA-14400: inserted partition key does not map to any partition
SQL>
看到了吗?你得到的错误,这意味着
只有 Y 和 N 作为其值
不是真的。
附:即使某些行的 refresh_flag 是 NULL,您也会得到相同的结果。