ORA-14108: 非法分区扩展 table 名称语法
ORA-14108: illegal partition-extended table name syntax
我有一个要求,我需要 运行 在 table 的多个分区上更新脚本。我已经为它写了一个脚本如下:
但它给出了
ORA-14108: 非法分区扩展 table 名称语法
原因:要访问的分区只能使用其名称指定。用户试图使用分区号或绑定变量。
操作:修改语句以使用其名称引用分区
知道如何避免这个错误吗?
DECLARE
TYPE partition_names IS varray(1) OF varchar2(20);
curr_partition partition_names;
LENGTH integer;
BEGIN
curr_partition :=partition_names('SM_20090731');
LENGTH := curr_partition.count;
FOR i IN 1 .. LENGTH LOOP
dbms_output.put_line('Current Partition name is: '||curr_partition(i));
UPDATE TABLE_Y PARTITION (curr_partition(i))
SET PARTITION_KEY=TO_DATE('2017-08-21','YYYY-MM-DD')
WHERE ORDER_ID IN
(SELECT ORDER_ID
FROM TABLE_X);
END LOOP;
END;
/
您必须连接分区名称并使用动态 SQL,即
EXECUTE IMMEDIATE
'UPDATE TABLE_Y PARTITION (' || curr_partition(i) || ')
SET PARTITION_KEY=TO_DATE(''2017-08-21'',''YYYY-MM-DD'')
WHERE ORDER_ID IN
(SELECT ORDER_ID
FROM TABLE_X)';
每当您 运行 SQL SELECT
查询或来自 PL/SQL 的 INSERT
、UPDATE
或 DELETE
语句时,绑定变量用于将任何 PL/SQL 表达式的值传递给 SQL 引擎。特别是,绑定参数将用于 curr_partition(i)
。但是,此类查询和语句的 PARTITION
子句似乎不支持绑定参数。我猜这是因为 Oracle 尝试在查询或语句具有绑定参数值之前为其创建执行计划,但如果查询或语句指定分区,则该信息是计划的关键部分,因此无法提供在绑定参数中。
我有一个要求,我需要 运行 在 table 的多个分区上更新脚本。我已经为它写了一个脚本如下:
但它给出了
ORA-14108: 非法分区扩展 table 名称语法
原因:要访问的分区只能使用其名称指定。用户试图使用分区号或绑定变量。
操作:修改语句以使用其名称引用分区
知道如何避免这个错误吗?
DECLARE
TYPE partition_names IS varray(1) OF varchar2(20);
curr_partition partition_names;
LENGTH integer;
BEGIN
curr_partition :=partition_names('SM_20090731');
LENGTH := curr_partition.count;
FOR i IN 1 .. LENGTH LOOP
dbms_output.put_line('Current Partition name is: '||curr_partition(i));
UPDATE TABLE_Y PARTITION (curr_partition(i))
SET PARTITION_KEY=TO_DATE('2017-08-21','YYYY-MM-DD')
WHERE ORDER_ID IN
(SELECT ORDER_ID
FROM TABLE_X);
END LOOP;
END;
/
您必须连接分区名称并使用动态 SQL,即
EXECUTE IMMEDIATE
'UPDATE TABLE_Y PARTITION (' || curr_partition(i) || ')
SET PARTITION_KEY=TO_DATE(''2017-08-21'',''YYYY-MM-DD'')
WHERE ORDER_ID IN
(SELECT ORDER_ID
FROM TABLE_X)';
每当您 运行 SQL SELECT
查询或来自 PL/SQL 的 INSERT
、UPDATE
或 DELETE
语句时,绑定变量用于将任何 PL/SQL 表达式的值传递给 SQL 引擎。特别是,绑定参数将用于 curr_partition(i)
。但是,此类查询和语句的 PARTITION
子句似乎不支持绑定参数。我猜这是因为 Oracle 尝试在查询或语句具有绑定参数值之前为其创建执行计划,但如果查询或语句指定分区,则该信息是计划的关键部分,因此无法提供在绑定参数中。