oracle - 具有引用分区的直接路径插入?

标签 oracle

如何使用直接路径插入将数据快速加载到具有引用分区的表中?直接路径插入不适用于启用的外键,并且不能禁用引用分区表的外键。

SQL> create table parent_table(a number primary key)
  2  partition by range(a) (partition p1 values less than (1));

Table created.

SQL> create table child_table(a number not null
  2     ,constraint child_table_fk foreign key (a) references parent_table(a))
  3  partition by reference (child_table_fk);

Table created.

SQL> alter table child_table disable constraint child_table_fk;
alter table child_table disable constraint child_table_fk
*
ERROR at line 1:
ORA-14650: operation not supported for reference-partitioned tables

最佳答案

不需要禁用外键。即使 the documentation,直接路径插入也适用于引用分区暗示它不应该。

下面的 LOAD AS SELECT 操作演示了使用直接路径插入:

explain plan for insert /*+ append */ into child_table select 1 from dual;

select * from table(dbms_xplan.display(format => 'basic'));

Plan hash value: 2781518217

--------------------------------------------------------
| Id  | Operation                        | Name        |
--------------------------------------------------------
|   0 | INSERT STATEMENT                 |             |
|   1 |  LOAD AS SELECT                  | CHILD_TABLE |
|   2 |   OPTIMIZER STATISTICS GATHERING |             |
|   3 |    FAST DUAL                     |             |
--------------------------------------------------------

如果直接路径插入不适用于引用分区,那是因为许多其他限制之一,例如触发器、不同的外键、可延迟约束等。

关于oracle - 具有引用分区的直接路径插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23330143/

相关文章:

oracle - 用DEBUG编译ORACLE包有什么影响

c# - proc中的Oracle查询未返回结果

oracle - 如何在具有时区值的时间戳中添加月份,同时保持完全相同的小时

oracle - 如何使用新创建的 LISTENER 注册可插拔数据库 (PDB)

php - 服务器/本地主机之间的不同环境正在改变日期格式 - php pdo mysql/oci

sql - 使用 TOAD 从 Oracle 创建更新脚本

sql - 更新零行然后提交?

database - 任何比 Oracle Database Union 更快的选择

java - 我应该如何使用jdbc将vararray从plsql发送到java?

Oracle查询自连接?