Oracle 两张表名交换

CREATE OR REPLACE PROCEDURE P_SWICH_OBJECT(PI_FROM VARCHAR2,
                                               PI_TO   VARCHAR2) IS
  TMP_SWITCH_NAME VARCHAR2(255);
BEGIN
  --对两个对象加排他锁
  EXECUTE IMMEDIATE 'lock table ' || PI_FROM || ' in exclusive mode';
  EXECUTE IMMEDIATE 'lock table ' || PI_TO || ' in exclusive mode';

  --生成临时表名,应确保该名表不存在
  TMP_SWITCH_NAME := 'tmpsw_' || SUBSTR(PI_FROM, 1, 20);
  EXECUTE IMMEDIATE 'alter table ' || PI_TO || ' rename to ' ||
                    TMP_SWITCH_NAME;
  EXECUTE IMMEDIATE 'alter table ' || PI_FROM || ' rename to ' || PI_TO;
  EXECUTE IMMEDIATE 'alter table ' || TMP_SWITCH_NAME || ' rename to ' ||
                    PI_FROM;

  --释放排他锁
  COMMIT;
END;

使用:

CALL P_SWICH_OBJECT(T_TEMP1,T_TEMP)

猜你喜欢

转载自blog.csdn.net/paopaopotter/article/details/84754015
今日推荐