Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 有没有办法检查truncate表?_Sql_Oracle_Commit_Truncate - Fatal编程技术网

Sql 有没有办法检查truncate表?

Sql 有没有办法检查truncate表?,sql,oracle,commit,truncate,Sql,Oracle,Commit,Truncate,有时,我尝试在多个模式之间测试场景,删除/修改表,插入/更新/删除查询,一些模式正在测试,而其他模式对生产非常重要。因此,有时我会在错误的模式中运行查询。因此,commit功能在这种情况下确实有帮助 但是Truncate表tab1不需要commit,如果我在错误的模式中执行它。。好吧,你知道斯尼里奥 我的问题:是否有类似于DMLstation的commit for truncate表这样的工作区?如果删除声明,则必须包含提交,或者在plsql中,必须单击绿色按钮进行提交 我使用这样的检查,每次我

有时,我尝试在多个模式之间测试场景,删除/修改表,插入/更新/删除查询,一些模式正在测试,而其他模式对生产非常重要。因此,有时我会在错误的模式中运行查询。因此,
commit
功能在这种情况下确实有帮助

但是
Truncate表tab1
不需要commit,如果我在错误的模式中执行它。。好吧,你知道斯尼里奥

我的问题:是否有类似于
DML
station的commit for truncate表这样的工作区?如果删除声明,则必须包含提交,或者在
plsql
中,必须单击绿色按钮进行提交

我使用这样的检查,每次我想要截断时,我都要修改条件,这真的很烦人

select count(1) into cnt from tab1 if cnt =0 then execute'Truncate table tab1'; end if;

我不是在寻找倒叙。我需要检查truncate表

truncate
是一个DDL语句,而不是DML,并且DDL语句自动包含提交。有关更多信息,请参阅


我不完全确定我是否理解您正在尝试做的事情-正如Tom所建议的,您可以使用一个自治事务来保持截断分离?如果您正在寻找将提交部分与截断部分分离的功能(即,如果您确定调用错误,则回滚截断),那么我担心您运气不好。

正如@Boneist所说,truncate隐式提交的DDL语句。如果不确定在架构中执行的操作,并且只希望在手动验证后提交,则不要截断,而是使用删除

使用DELETE语句,您可以控制提交。话虽如此,TRUNCATE将高水位线重置为零,但DELETE不会。即使删除表中的所有行,Oracle也会扫描HWM下的所有块。看看这个


如果您希望返回被截断的数据,并且使用11gR2及以上版本,则可以使用。

为什么不使用“从表中删除”?这是一条DML语句,可以提交或回滚。@sfrutig
TRUNCATE
会将高水位线重置为零,
DELETE
不会。在这种情况下,@LalitKumarB Flashback的可能重复项对我没有帮助。@Baalback您的要求不清楚。你想检查什么?您发布的查询对我来说毫无意义,因为您正在检查计数,如果没有行,则正在截断表。为什么?重置高水位线?除此之外,如果没有行,那么您要截断的是什么?我试图避免错误地截断表,我正在处理不同的模式。我想看看是否有一种类似自动提交的方法。