【发布时间】:2020-05-30 15:20:18
【问题描述】:
我需要将特定日期的班次表中的员工 ID 替换为在特定日期没有任何班次的另一个员工 ID。 这是我的桌子,
CREATE TABLE EMPLOYEE
(EMPLOYEE_ID NUMBER(4) NOT NULL,
NAME VARCHAR(50),
GENDER VARCHAR(10),
BIRTH_DAY DATE,
PRIMARY KEY(EMPLOYEE_ID)
);
CREATE TABLE SHIFT
(SHIFT_ID NUMBER(4),
SHIFT_DATE DATE,
CUSTOMER_ID NUMBER(4),
SERVICE_ID NUMBER(4),
EMPLOYEE_ID NUMBER(4),
SHIFT_CHARGE FLOAT(10),
PRIMARY KEY(SHIFT_ID),
FOREIGN KEY (EMPLOYEE_ID) REFERENCES EMPLOYEE(EMPLOYEE_ID)
);
出于上述目的,我想创建一个程序。我创建的程序如下。但是有一个编译错误。
CREATE OR REPLACE PROCEDURE CHANGE_SHIFT_SHEDULED
(
EMPLOYEE_ID IN SHIFT.EMPLOYEE_ID%TYPE,
SHIFT_DATE IN SHIFT.SHIFT_DATE%TYPE
)
AS
CHECK_CON BOOLEAN:=TRUE;
BEGIN
FOR SICK_EMP_SHIFT_REC IN (SELECT * FROM SHIFT WHERE SHIFT.EMPLOYEE_ID=EMPLOYEE_ID AND SHIFT.SHIFT_DATE=SHIFT_DATE)
LOOP
FOR EMP_REC IN (
SELECT e.EMPLOYEE_ID,COUNT(e.EMPLOYEE_ID)AS SHIFT_COUNT,
CASE
WHEN SHIFT_COUNT>0 THEN FALSE
ELSE TRUE
END AS SHIFT_COUNT
FROM EMPLOYEE e LEFT OUTER JOIN SHIFT s ON e.EMPLOYEE_ID=s.EMPLOYEE_ID
WHERE s.SHIFT_DATE=SHIFT_DATE
GROUP BY e.EMPLOYEE_ID)
LOOP
CHECK_CON:=EMP_REC.SHIFT_COUNT;
IF CHECK_CON THEN
UPDATE SHIFT s SET s.EMPLOYEE_ID=EMP_REC.EMPLOYEE_ID WHERE s.SHIFT_ID=SICK_EMP_SHIFT_REC.SHIFT_ID;
EXIT;
END IF;
END LOOP;
END LOOP;
END;
/
请任何人帮我解决这个问题。
【问题讨论】:
标签: sql oracle stored-procedures plsql