最近,我学习oracle9i时把从Sql server2000上的程序移植到oracle9i上, 可是确发现一个很大问题, 那就是oracle的DDL语句自动提交事务.
以前在sql server2000中,以下代码在一个事务中实现, 而且运行良好.
伪码如下:
事务开始;
从相关表中取得一个编号n, 并保存这个编号;
从一个没有数据的模板表t_templ创建一个表t_templ_n;
为t_templ_n创建索引;
向表中插入一些数据;
提交事务; 如果在执行过程中出现什么错误, 就回滚事务. 在sql server中可以正确到回滚到事务开始时的状态.
但在oracle中就不行了, 创建表之后即使后面的操作失败,事务回滚也不能把表删除.当然我可以自己在事务失败时取删除那个表,但我感觉这样做不够安全, 而且也很麻烦.
请各位大侠指点迷津, 您在这种情况下怎么做? 或者有没有什么办法可以回滚那个表?
小弟 先 谢谢 各位了!!!
以前在sql server2000中,以下代码在一个事务中实现, 而且运行良好.
伪码如下:
事务开始;
从相关表中取得一个编号n, 并保存这个编号;
从一个没有数据的模板表t_templ创建一个表t_templ_n;
为t_templ_n创建索引;
向表中插入一些数据;
提交事务; 如果在执行过程中出现什么错误, 就回滚事务. 在sql server中可以正确到回滚到事务开始时的状态.
但在oracle中就不行了, 创建表之后即使后面的操作失败,事务回滚也不能把表删除.当然我可以自己在事务失败时取删除那个表,但我感觉这样做不够安全, 而且也很麻烦.
请各位大侠指点迷津, 您在这种情况下怎么做? 或者有没有什么办法可以回滚那个表?
小弟 先 谢谢 各位了!!!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货