【发布时间】:2021-02-09 03:47:13
【问题描述】:
如果某位员工工作超过 5 年,我有一个代码会删除他/她。我想一次性将此声明应用于所有员工。
DECLARE
currentDate DATE := SYSDATE;
hireDate Date;
empId number := 100;
BEGIN
SELECT hire_date INTO hireDate FROM employees
WHERE employee_id = empId;
DELETE FROM emp
WHERE (currentDate-hireDate) / 365 > 5 AND employee_id = empId;
DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT || ' rows deleted.');
END;
如您所见,我将 empId 声明为 100。此员工的currentDate-hireDate / 365 > 5 返回 4,这是错误的。我的桌子上有 107 名员工,从 100 到 206。如果我删除 WHERE employee_id = empId; ,它会返回太多行错误。您对此有何建议?
【问题讨论】:
-
删除employee_id = empId 子句时遇到什么错误?
-
错误太多行表明 empid 列在您的表 emp 中不是唯一的
-
正确的方法是使用 SQL 查询而不是 PL/SQL 编码方式
-
从 emp WHERE 中删除 (sysdate-hireDate) / 365 > 5;
-
@GeorgeJoseph 此声明存在一些问题; (1) 伪列
sysdate有时间部分,(2) 除以365可能会由于闰年而产生错误结果
标签: sql oracle plsql sql-delete