Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PL/SQL过程比较3名员工的工资,然后交换最低和最高工资_Sql_Oracle_Stored Procedures - Fatal编程技术网

PL/SQL过程比较3名员工的工资,然后交换最低和最高工资

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

我希望有一个程序,将3个员工id作为参数,然后比较它们,最低和最高的将被交换,而中间的一个将被保留。我不确定我是否正确处理了这个问题,我在if-else部分中不断发现oracle apex上的错误。我读过也许实施案例陈述会更容易? -注:这是一个家庭作业问题 到目前为止,我所拥有的:

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;