PL/SQL过程比较3名员工的工资,然后交换最低和最高工资
我希望有一个程序,将3个员工id作为参数,然后比较它们,最低和最高的将被交换,而中间的一个将被保留。我不确定我是否正确处理了这个问题,我在if-else部分中不断发现oracle apex上的错误。我读过也许实施案例陈述会更容易? -注:这是一个家庭作业问题 到目前为止,我所拥有的:PL/SQL过程比较3名员工的工资,然后交换最低和最高工资,sql,oracle,stored-procedures,Sql,Oracle,Stored Procedures,我希望有一个程序,将3个员工id作为参数,然后比较它们,最低和最高的将被交换,而中间的一个将被保留。我不确定我是否正确处理了这个问题,我在if-else部分中不断发现oracle apex上的错误。我读过也许实施案例陈述会更容易? -注:这是一个家庭作业问题 到目前为止,我所拥有的: create or replace procedure myproc(empid in number, empid in number, empid in number) is originalsalary1
create or replace procedure myproc(empid in number, empid in number, empid in number) is
originalsalary1 employees.salary%type;
originalsalary2 employees.salary%type;
originalsalary3 employees.salary%type;
newsalary employees.salary%type;
begin
select salary INTO originalsalary1 from employees
where employee_id = empid;
select salary INTO originalsalary2 from employees
where employee_id = empid;
select salary INTO originalsalary3 from employees
where employee_id = empid;
if originalsalary1 <= originalsalary2 and originalsalary3 then
newsalary := originalsalary1 * 1.1;
elseif originalsalary2 <= originalsalary1 and originalsalary3 then
newsalary := originalsalary2 * 1.1;
elseif originalsalary3 <= originalsalary1 and originalsalary2 then
newsalary := originalsalary3 * 1.1;
end if;
end;
/
这不是完整答案,但看起来您对所有三个员工ID都使用了相同的变量名。它们不应该是empid1、empid2、empid3吗?我觉得你的and子句错了大多数语言中的originalsalary3'对于0以外的所有值都会失败或求值为true。该过程看起来也不会返回任何内容
CREATE OR REPLACE PROCEDURE PR_PREP(EMPID1 IN INT, EMPID2 IN INT , EMPID3 IN
INT)
IS
MAX_SAL_EMP_ID INT;
MIN_SAL_EMP_ID INT;
MAX_SAL EMPLOYEES.SALARY%TYPE;
MIN_SAL EMPLOYEES.SALARY%TYPE;
BEGIN
SELECT EMP_ID , SALARY INTO MAX_SAL_EMP_ID , MAX_SAL FROM EMPLOYEES WHERE
EMP_ID IN (EMPID1, EMPID2, EMPID3)
AND SALARY = (SELECT MAX(SALARY) FROM EMPLOYEES WHERE EMP_ID IN (EMPID1,
EMPID2, EMPID3));
SELECT EMP_ID , SALARY INTO MIN_SAL_EMP_ID , MIN_SAL FROM EMPLOYEES WHERE
EMP_ID IN (EMPID1, EMPID2, EMPID3)
AND SALARY = (SELECT MIN(SALARY) FROM EMPLOYEES WHERE EMP_ID IN (EMPID1,
EMPID2, EMPID3));
UPDATE EMPLOYEES SET SALARY = MAX_SAL WHERE EMP_ID = MIN_SAL_EMP_ID;
UPDATE EMPLOYEES SET SALARY = MIN_SAL WHERE EMP_ID = MAX_SAL_EMP_ID;
COMMIT;
END;