sql - 可以在 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”:
标识符无效
解决方案
一个好的起点是文档。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 小时前。
推荐阅读
- java - 为 NON PLAY STORE APP 创建 CHECK_FOR_UPDATE 机制的最佳方法是什么
- python - 如何在 Pandas DataFrame 中取值两侧的平均值?
- php - 本地主机抛出 403 禁止错误 Apache Laravel
- python - 如何管理 python/selenium 中的错误?我接下来要继续学习的步骤是什么?
- python - 即使安装在 python/site-packages 文件夹中,也找不到 folium --version
- django - Django 管理界面上的多对多字段
- font-awesome - Font awesome pro 5.13.0 向后兼容吗?
- c# - 外键作为 NULL 传递。ASP .NET MVC
- google-cloud-platform - 如何获取 Google Cloud Vision API 徽标检测的置信度分数?
- c# - 如何提取两个字符之间的字符串?