在PLSQL中执行了EXECUTE IMMEDIATE 'RENAME 旧表名 TO 新表名' 改变了表名。
如果在后续的其他操作中操作中出现错误,能将表名回滚吗?如何回滚?CREATE OR REPLACE PROCEDURE TEST
IS
BEGIN
EXECUTE IMMEDIATE 'RENAME test_01 TO test_02';
ROLLBACK;
END;
/
这个方法不行,不知道有没有其他方法?
如果在后续的其他操作中操作中出现错误,能将表名回滚吗?如何回滚?CREATE OR REPLACE PROCEDURE TEST
IS
BEGIN
EXECUTE IMMEDIATE 'RENAME test_01 TO test_02';
ROLLBACK;
END;
/
这个方法不行,不知道有没有其他方法?
一个表改名的情况下可以用FLASHBACK TABLE 闪回吗? 请问语句怎么写?
用dbms_flashback.enable_at_time()是不是如果期间有其他用户的操作也全部被恢复了?
最笨的办法:
再将名字改回来
EXECUTE IMMEDIATE 'RENAME test_02 TO test_01 ';
你可以把你执行成功的语句,保存到一个变量里面,或者数组之类的。
在处理出错的时候,把他们恢复回去。
rename是默认执行commit的语句。rollback是倒不回来的。
用到系统日至来恢复,也是一个方法。就是用起来也比较繁。
所以,我给了你
FLASHBACK TABLE tablename1 TO BEFORE DROP RENAME TO tablename2;
这样的思考路子。他是对drop table 语句有效的。
对rename 的语句,我确认一下,看看可不可以。(我记得好像是可以的。)