oracle - 从 oracle db 截断表时出错

我在清除数据库中所有表中的所有数据的过程中执行类似的操作。

LOOP
    dbms_utility.exec_ddl_statement('alter table ' || c.owner || '.' || c.table_name || ' disable constraint ' || c.constraint_name);
  END LOOP;
 .
 .
 .

LOOP
    EXECUTE IMMEDIATE 'TRUNCATE TABLE ' || t.table_name ;
  END LOOP;

现在,这会抛出以下错误:

ORA-03291: Invalid truncate option - missing STORAGE keyword
ORA-06512: at "MYSCHEMA.CLEAR_DATA", line 15
ORA-06512: at line 2
Process exited.
Disconnecting from the database MYDB.
  1. 为什么存储关键字是强制性的?我以为 DROP STORAGE 是默认值。
  2. 甚至指定存储关闭,如,

    立即执行“截断表” || t.表名|| '删除存储';

    没有帮助。错误是一样的。

  3. 我认为这可能与某些表的外部约束有关。因此,脚本前面的“禁用约束”

最佳答案

我建议您将正在执行的命令构建在一个字符串变量中,使用 dbms_output 输出它,然后执行它。通过这种方式,您将准确地看到它试图执行的是什么导致了错误。

可能导致此错误的一件事是,如果您的表名中有一个空格(是的,这是可能的)。如果是这种情况,解决方案是将表名用双引号引起来。

dev> create table "dave exp" (x number);

Table created.

dev> truncate table dave exp;
truncate table dave exp
                    *
ERROR at line 1:
ORA-03291: Invalid truncate option - missing STORAGE keyword

dev> truncate table "dave exp";

Table truncated.

https://stackoverflow.com/questions/657639/

相关文章:

iphone - 黑莓中的 Webparts

php soap 客户端 : wsdl vs. 非 wsdl - 哪个更快?

.net - .NET 中的操作方法 : Auto-Restart Console App.

java - Java 或 .NET 的跨语言配置

wcf - 具有自定义绑定(bind)的 SSL WCF

php - 使用 PHP 的 DOM API 递归添加子项

spring - 基于 spring 的网络应用程序中的父上下文

web-services - SoapActionEndpointMapping在Spring-ws

iphone - 更改 UIImageView 动画速度

Django 模型继承 - 我可以更改模型类型吗?