如何创建一个带有2个参数func和sal的过程来验证员工的工资是在min_salary和max_salary之间(来自JOBS表的2个列),如果它们不在其中,它需要抛出异常吗? 另外我正在使用employees表中的行(salary,employee_id,job_id)到目前为止我得到了这个:
CREATE OR REPLACE PROCEDURE check_sal(func employees.job_id%type,sal employees.salary%type)
IS
max_sal jobs.max_salary%type;
min_sal jobs.min_salary%type;
empid employees.employee_id%type;
BEGIN
SELECT e.employee_id,e.salary,e.job_id,j.max_salary,j.min_salary INTO empid,sal,func,max_sal,min_sal
FROM employees e JOIN jobs j ON e.job_id = j.job_id
ORDER by e.employee_id;
FOR i IN empid.FIRST..empid.LAST LOOP
IF(sal < min_sal) OR (sal > max_sal) THEN RAISE_APPLICATION_ERROR(-20000,'OUT OF BOUND');
ELSE DMBS_OUTPUT.PUT_LINE('OK');
END IF;
END LOOP;
END;
我在第10行得到错误错误:PL / SQL:语句被忽略。我做错了什么?
答案 0 :(得分:0)
答案 1 :(得分:0)
嘿,我只是查看了问题并说明了下面的片段 这肯定会奏效。我没有工作区,但这个 应该管用。如有任何问题,请告诉我。
$qb
->select('d')
->leftJoin('d.user', 'u')
->where($qb->expr()->isNotNull('d.deletedAt'))
->andWhere('u.id = :user_id')
->setParameter('user_id', $user->getId())
->orderBy('d.dtrDate', 'DESC');
答案 2 :(得分:0)
刚刚发现使用FOR和empid变量不是必要的,所以答案要简单得多:
CREATE OR REPLACE PROCEDURE check_sal(func employees.job_id%TYPE,sal employees.salary%TYPE)
AS
max_sal jobs.max_salary%TYPE;
min_sal jobs.min_salary%TYPE;
BEGIN
SELECT max_salary,min_salary into max_sal,min_sal
FROM JOBS
WHERE job_id=func;
DBMS_OUTPUT.PUT_LINE(max_sal||' and '||min_sal);
IF sal < min_sal OR sal > max_sal THEN RAISE_APPLICATION_ERROR(-20205,'Out of Bounds');
END IF;
END;