首页 > 解决方案 > 可以在 24 小时后自动删除记录的 Oracle 存储过程

问题描述

程序可以在 24 小时后自动触发并从特定表中删除记录吗?

我试过了,但作为初学者我做不到。

这是我的代码:

CREATE OR REPLACE PROCEDURE deleteresetlinks ("2" INT)
AS BEGIN  
    DELETE FROM passwordresetlink 
    WHERE DATEDIFF(DAY, 'date_created', GETDATE()) > 2;
END;

此代码引发此错误:

SQL> 显示错误
PROCEDURE DELETERESETLINKS 的错误:

LINE/COL 错误

3/3 PL/SQL:忽略 SQL 语句
3/39 PL/SQL:ORA-00904:“DATEDIFF”:
标识符无效

标签: sqloraclestored-proceduresplsqlprocedure

解决方案


一个好的起点是文档。Oracle 有自己的数据类型和运算符,您不能只是从其他编程语言或数据库中借用它们并希望它能够工作。DATEDIFF 是一个 mysql 函数,它在 oracle 中不存在。我想你正在寻找这样的东西:

CREATE OR REPLACE PROCEDURE deleteresetlinks (age_i IN NUMBER DEFAULT 1)
AS BEGIN  
  DELETE FROM passwordresetlink WHERE date_created < SYSDATE - age_i;
END;

在您原来的情况下,参数声明("2" INT)创建了一个名称为“2”的参数 - 这非常令人困惑,可能不是您想要的。我将其替换为更具描述性的名称“age_i”——使用后缀“_i”表示它是一个 IN 参数。我假设“date_create”列的类型是日期,在这种情况下,您可以使用简单的日期算术来计算天差。SYSDATE - 1代表 24 小时前。


推荐阅读