oracle 通过存储过程 删除一张表的n天前的数据。

oracle 通过存储过程 删除一张表的n天前的数据。,第1张

delete from a_b_c_123 where "日期"=(

select “日期" from a_b_c_123

where "日期=N天")

以上语句能看懂吧?最后一句可以换变量,然后整个写作存储过程

1、要删除的第N条记录中,是否有可以作为delete的where唯一条件。

2、如果没有满足1条件,可以使用PB之类的程序,用DW检索出这个表数据,然后用代码编程,删除指定的第N条记录后提交。

3、或者利用数据库的导出功能,将这个表中的数据导出为文本文件,用编辑器删除指定的第N条记录后,然后重新导入(导入之前,将原表清空)。

SQL是Structured Query Language的缩写,中文译为“结构化查询语言”。

SQL是一种计算机语言,用来存储、检索和修改关系型数据库中存储的数据。

首先利用数据库自带的命令行工具将数据库备份下来,例如对MySQL将databasename数据库备份到D:\data.sql(具体查阅数据库说明书)

mysqldump databasename >"D:\data.sql"

然后将该文件以日期参量重名名。如果指定保留N天的数据可能有一定困难,不过既然要求7天,不妨以星期作为区分。

假设文件名具有格式“data_日期.sql”,则更名语句为(建议先创建后改名,对于很大的数据库可能要备份很长时间并超过0点)

ren "data.sql" "data_%date%.sql"

若系统时间格式为“2009-04-05 星期日”,则产生文件“data_2009-04-05 星期日.txt”。

获取星期几的语句:%date:~11,3%

其中11表示从第11个字符开始(从0开始计算),总共截取3个字符。由此可获得字符串“星期日”。重名名前,删除以data_开头,包含“星期日”的文件

del "data_*%date:~11,3%*.sql"

这样就把上星期的那个文件删除了。

注意:如果系统日期格式与上面的不一致,数字需重新计算,特别是若日期中含有“/”、“:”等字符会导致创建文件失败,此时年月日星期均需手动提取,例如对“04/05/2009 Sun”,应使用“%DATE:~6,4%%DATE:~0,2%%DATE:~3,2%%DATE:~11,3%”得到“20090405Sun”。查看日期格式可使用“echo %date%”。

另外,如果某项(时间格式、文件名、路径等)包含空格则必须使用引号。

脚本源代码

mysqldump databasename >"D:\data.sql"

del "D:\data_*%date:~11,3%*.sql"

ren "D:\data.sql" "data_%date%.sql"

编为一个bat文件,添加计划任务,每天定时执行即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6896059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-29
下一篇 2023-03-29

发表评论

登录后才能评论

评论列表(0条)

保存