2011-01-21 21 views
0

我想清除一些DEV DB。我有脚本做了很多“我从未写过”的“删除”。我不确定他们会以正确的状态离开数据库(这是一个开发数据库,​​所以它不是那么糟糕,但仍然...)。SQL:清理数据库,检查没有违规并可能回滚

我想知道,如果删除后数据库违规,我可以将SQL清理脚本包装到事务中并回滚到prev数据库状态吗?

基本上我已经有了:

delete from aaa 
delete from bbb 
... 
delete from zzz 

,我想这样做:

delete from aaa 
delete from bbb 
... 
delete from zzz 
check for violation <-- how do I do this ? 

,并在交易或一些可以回滚这个包起来。

我该怎么办? (这是Oracle 10,但标准的SQL会很好)。

+0

什么是“违规”是什么意思?这是Oracle的术语吗? – Blorgbeard 2011-01-21 10:11:47

+0

虽然有这样的代码的标准(SQL/PSM),它没有广泛实施的供应商(只有postgre?)对于甲骨文,猜如:`DECLARE x NUMBER; SELECT COUNT(*)INTO x FROM YourTable WHERE your_colum ='illegal value'; IF(x> 0)THEN ROLLBACK END IF;' – onedaywhen 2011-01-21 11:55:01

回答

1

与Oracle执行某些语句使用,以确保没有自动提交时(通常是默认关闭)

SET AUTOCOMMIT OFF 

那么你可以做一个COMMIT当你确信每一件事情是好的或ROLLBACK如果不是