在Oracle中截断表获取错误

PPS*_*ein 26 sql oracle plsql

我遇到的问题是当我在Oracle中运行以下命令时,我遇到了错误.

Truncate table mytable;
Run Code Online (Sandbox Code Playgroud)

错误:

ORA-02266: unique/primary keys in table referenced by enabled foreign keys
Run Code Online (Sandbox Code Playgroud)

我发现,这个mytable与其他表有关系.这就是为什么Truncate命令不能继续进行的原因.如何使用Truncate命令使用SQL脚本从myTable中删除数据?

Ric*_*iwi 38

您必须将TRUNCATE语句交换为DELETE语句,速度较慢且已记录,但这是在约束到位时执行此操作的方法.

DELETE mytablename;
Run Code Online (Sandbox Code Playgroud)

或者您可以找到引用相关表的外键并暂时禁用它们.

select 'ALTER TABLE '||TABLE_NAME||' DISABLE CONSTRAINT '||CONSTRAINT_NAME||';'
from user_constraints
where R_CONSTRAINT_NAME='<pk-of-table>';
Run Code Online (Sandbox Code Playgroud)

pk-of-table要截断的表的主键名称在哪里

运行以上查询的输出.完成后,请记住再次启用它们,只需更改DISABLE CONSTRAINTENABLE CONSTRAINT


Naj*_*nim 10

此页提供了一个非常好的解决方案......

ORA-02266:表中由启用的外键引用的唯一/主键

我在这里从中复制解决方案:

  • 找到引用的ENABLED外键约束并禁用它们.
  • 从表中截断/删除.
  • 使用任何文本编辑器..只需在您从查询中获得的输出中更改禁用以启用,然后运行它.

    select 'alter table '||a.owner||'.'||a.table_name||' disable constraint '||a.constraint_name||';'
    from all_constraints a, all_constraints b
    where a.constraint_type = 'R' and a.status='ENABLED'
    and a.r_constraint_name = b.constraint_name
    and a.r_owner  = b.owner
    and b.table_name = upper('YOUR_TABLE');
    
    Run Code Online (Sandbox Code Playgroud)


Dav*_*har 8

错误消息告诉您有其他表引用您的表的外键约束.

根据Oracle文档

您不能截断已启用的外键约束的父表.您必须在截断表之前禁用约束.

禁用外键语法是:

ALTER TABLE table_name禁用CONSTRAINT constraint_name;


小智 5

问题:

\n\n
Error \xe2\x80\x9cORA-02266: unique/primary keys in table referenced by enabled foreign keys\xe2\x80\x9d when trying to truncate a table.\n
Run Code Online (Sandbox Code Playgroud)\n\n

错误信息:

\n\n
SQL> truncate table TABLE_NAME;  \n\ntruncate table TABLE_NAME\n           *\nERROR at line 1:\nORA-02266: unique/primary keys in table referenced by enabled foreign keys\n
Run Code Online (Sandbox Code Playgroud)\n\n

解决方案:\n-- 找到引用的外键约束。

\n\n
 SQL> select 'alter table '||a.owner||'.'||a.table_name||' disable constraint '||a.constraint_name||';'\n  2  from all_constraints a, all_constraints b\n  3  where a.constraint_type = 'R'\n  4  and a.r_constraint_name = b.constraint_name\n  5  and a.r_owner  = b.owner\n  6  and b.table_name = 'TABLE_NAME';\n\n    'ALTER TABLE'||A.OWNER||'.'||A.TABLE_NAME||'DISABLE CONSTRAINT'||A.CONSTRAINT_NAME||';'\n    ---------------------------------------------------------------------------------------------------------\n    alter table SCHEMA_NAME.TABLE_NAME_ATTACHMENT disable constraint CONSTRAINT_NAME;    \nalter table SCHEMA_NAME.TABLE_NAME_LOCATION disable constraint CONSTRAINT_NAME;\n
Run Code Online (Sandbox Code Playgroud)\n\n

-- 禁用它们

\n\n
alter table SCHEMA_NAME.TABLE_NAME_ATTACHMENT disable constraint CONSTRAINT_NAME;\nalter table SCHEMA_NAME.TABLE_NAME_LOCATION disable constraint CONSTRAINT_NAME;\n
Run Code Online (Sandbox Code Playgroud)\n\n

-- 运行截断

\n\n
SQL> truncate table TABLE_NAME;\n\nTable truncated.\n
Run Code Online (Sandbox Code Playgroud)\n\n

-- 重新启用外键

\n\n
 SQL> select 'alter table '||a.owner||'.'||a.table_name||' enable constraint '||a.constraint_name||';'\n  2  from all_constraints a, all_constraints b\n  3  where a.constraint_type = 'R'\n  4  and a.r_constraint_name = b.constraint_name\n  5  and a.r_owner  = b.owner\n  6  and b.table_name = 'TABLE_NAME';\n\n'ALTER TABLE'||A.OWNER||'.'||A.TABLE_NAME||'ENABLE CONSTRAINT'||A.CONSTRAINT_NAME||';'\n--------------------------------------------------------------------------------\n\nalter table SCHEMA_NAME.TABLE_NAME_ATTACHMENT enable constraint CONSTRAINT_NAME;\nalter table SCHEMA_NAME.TABLE_NAME_LOCATION enable constraint CONSTRAINT_NAME;\n
Run Code Online (Sandbox Code Playgroud)\n\n

-- 启用它们

\n\n
alter table SCHEMA_NAME.TABLE_NAME_ATTACHMENT enable constraint CONSTRAINT_NAME;\nalter table SCHEMA_NAME.TABLE_NAME_LOCATION enable constraint CONSTRAINT_NAME;\n
Run Code Online (Sandbox Code Playgroud)\n