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;
版权声明:本文标题:Oracle存储过程备份数据库表 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1705347764h482033.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论