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您的要求不清楚。你想检查什么?您发布的查询对我来说毫无意义,因为您正在检查计数,如果没有行,则正在截断表。为什么?重置高水位线?除此之外,如果没有行,那么您要截断的是什么?我试图避免错误地截断表,我正在处理不同的模式。我想看看是否有一种类似自动提交的方法。