我在清除数据库中所有表中的所有数据的过程中执行类似的操作。
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.
DROP STORAGE
是默认值。甚至指定存储关闭,如,
立即执行“截断表” || t.表名|| '删除存储';
没有帮助。错误是一样的。
最佳答案
我建议您将正在执行的命令构建在一个字符串变量中,使用 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/