admin 管理员组

文章数量: 887021


2024年1月16日发(作者:取消mount挂载)

主要功能描述:在备份信息表中获取出要备份的表信息,组合后进行表的备份;同时删除5天以前的备份信息。

存储过程示例:

createorreplaceprocedurebak_table_info

(

--定义参数

strErrOUTvarchar2--存储过程执行结果。成功返回空,失败返回错误原因

)is

v_sqlvarchar2(2000);--动态sql语句变量

bak_tableNamevarchar2(50);--组合备份之后的表名变量

tableName varchar2(50); --源备份表名

nowDatechar(10);--当前日期变量

flag number;--重复表标记

check_baktable_namevarchar2(50);

begin

--获取当前日期

selectto_char(sysdate,'MMdd')intonowDatefrom dual;

dbms__line('要备份的日期:'||nowDate);

--定义游标获取备份表信息:包括要备份的表名 和备份之后的表名

declareCURSORmyCusorisselecttable_name,bak_table_namefromt_baktable_info;

--使用游标获取数据

begin

forcusorresultinmyCusor

loop

--为备份之后的表添加时间戳

bak_tableName:=trim(_table_name)||trim('_')||trim(nowDate));

dbms__line('Bak Table Name1:'||bak_tableName);

--将游标取出的要备份的表所在帐户和要备份的表名拼接字符串

tableName:=trim(_name);

--oracle表名有长度限制,表名长度不能超过30个字符 否则报错

if LENGTH(trim(_name)||trim('_')||trim(nowDate))<30then

--判定备份后的表名是否存在

executeimmediate'select count(*) from all_tables where table_name

='''||upper(bak_tableName)||''''into flag;

--如果已经存在则删除

if(flag>0)then

v_sql:=' drop table '||upper(bak_tableName);

executeimmediate(v_sql);

--提交

COMMIT;

endif;

-- 做备份操作

v_sql:='create table '||bak_tableName||' as select * from '||tableName||';

executeimmediate(v_sql);

--提交

COMMIT;

endif;

endif;

endloop;

end;

--*******************************************************************************

dbms__line('***********备份结束!!!*********进入删除!!!********************');

--删除五天以前的备份

--获取当前日期

selectto_char(sysdate-5,'MMdd')intonowDatefrom dual;

dbms__line('要删除的日期:'||nowDate);

--定义游标

declareCURSORmyDropCusorisselectbak_table_namefromt_baktable_info;

--使用游标获取数据

begin

fordropcusorresultinmyDropCusor

loop

--拼接备份之后的表所在帐户和备份前的表名

bak_tableName:=trim(trim(_table_name)||trim('_')||trim(nowDate));

dbms__line('Drop Table Name:'||bak_tableName);

--判定备份后的表名是否存在

executeimmediate'select count(*) from all_tables where table_name

='''||upper(bak_tableName)||''''into flag;

--如果已经存在则删除

if(flag>0)then

v_sql:=' drop table '||upper(bak_tableName);

executeimmediate(v_sql);

--提交

COMMIT;

endif;

endloop;

end;

--*****************************************************************************

***

--发生异常时返回错误码

EXCEPTIONWHENOTHERSTHEN

strErr:=substr(sqlerrm,1,300);

--输出错误信息

dbms__LINE(strErr);

ROLLBACK;

endbak_table_info;


本文标签: 备份 表名 返回 信息