实际发现dm在执行此类语句后会自动提交事务。 和sqlserver不一样,无法回滚事务!
现在的需求是一次会使用语句创建或修改多个表,其中有的操作可能会失败,怎么实现要么全部成功要么全部失败?
DDL语句是有隐式提交的,也可以通过参数来控制DDL语句不自动提交,但是不建议这么做。
您这个是否可以通过create or replace来做这个任务呢,这样只要有失败的就判定失败,下次重新create or replace继续创建表也是没问题的,这个满足需求么
可以测试一下设置 DDL_AUTO_COMMIT 参数为 0是否有效
首先,使用SYSDBA用户设置参数
ALTER SYSTEM SET 'DDL_AUTO_COMMIT' = 0 SPFILE;
然后,重启达梦数据库服务
测试过程如下
--建表
CREATE TABLE T_COMMTST(A INT);
--查询,当前应该能成功查询
SELECT * FROM T_COMMTST;
--回滚事务
ROLLBACK;
--再次查询,当前应该报无效的表或视图名
SELECT * FROM T_COMMTST;
ddl语句没办法回滚的。sqlserver的事务处理,在整个数据库界也是少有的