如果员工年龄超过60岁,我该如何编写一个pl / sql脚本以自动从员工表中删除记录?

问题描述

如果员工年龄超过60岁,我该如何编写一个pl / sql脚本来自动从员工表中删除记录?

解决方法

从我的角度来看,如果正确设置了数据模型,则无法执行此操作-数据库不允许这样做。

为什么?因为员工并不孤单。读取:它们仅在employee表中不存在。他们为工作付费,有人检查了他们的出勤,他们使用某些设备来完成工作(有人记录了下来),等等。

这意味着employee表是一个 master 表,而所有其他表(可能还有更多)都是它的明细。如果一切都按原样设置,那么在您庆祝Scott 60岁生日后尝试删除它时,就会违反 zillion 外键约束。所以-不,您将无法像这样从employee表中删除他的记录。


但是,如果我们假设这是一个家庭作业问题,那么:数据库应该怎么知道Scott才60岁?不是。您必须编写一个程序来检查每个人的年龄,如果满足某些条件,则删除记录。例如:

create or replace procedure p_delete_60 is
begin
  delete from employee
    where months_between(trunc(sysdate),date_of_birth) / 12 >= 60;
end;

但是,您必须每天手动运行该过程。这远非“自动”。那么,为什么不指示数据库为您完成呢?怎么样?安排工作。您可以使用两个软件包:DBMS_JOBDBMS_SCHEDULE。对于这样一个简单的任务,第一个将要做:

declare
  l_job number;
begin
  dbms_job.submit(job       =>  l_job,what      => 'p_delete_60;',next_date =>  trunc(sysdate) + 1,interval  => 'trunc(sysdate) + 1'
                 );
  commit;
end;
/

检查作业是否存在:

SQL> select job,last_date,next_date,what from user_jobs;

       JOB LAST_DATE           NEXT_DATE           WHAT
---------- ------------------- ------------------- --------------------
       121                     04.09.2020 00:00:00 p_delete_60;

SQL>

现在,您只需要等到午夜才能看到发生了什么。也许 something (如果某人年满60岁,或者-在第一次运行过程中-已经超过60岁),也许 thingthing (如果每个人都小于60岁)。 >

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...