如何解决范围的验证触发器 - Oracle
每当创建或更新新记录时,都需要验证此人的薪水是否在工作范围内。
包含 job_id、job_title、min_salary、max_salary 字段的 Job 表。 Employee 表,其中包含 employee_id、姓名、job_id 和薪水。
这是我想要做的触发器:
CREATE OR REPLACE TRIGGER range_valid
BEFORE INSERT OR UPDATE
OF JOB_ID,SALARY ON EMPLOYEES
FOR EACH ROW
DECLARE
l_min_salary INTEGER;
l_max_salary INTEGER;
l_salary INTEGER;
BEGIN
SELECT MIN_SALARY,MAX_SALARY
INTO l_min_salary,l_max_salary
FROM JOBS
WHERE JOB_ID = :new.JOB_ID;
IF l_salary < l_min_salary OR l_salary > l_max_salary THEN
RAISE_APPLICATION_ERROR (
'Salario debe estar en el rango de' || l_min_salary || ' and ' || l_max_salary);
END IF;
END range_valid;
但它向我显示了错误:
错误(9,5):PL/SQL:语句被忽略
错误(9,5):PLS-00201:必须声明标识符“L_SALARY”
我不知道如何解决它。
解决方法
您不需要声明 l_salary
并且在不赋值的情况下使用它也没有意义;-)
假设 employees
表包含列 salary
,触发器应如下所示:
CREATE OR REPLACE TRIGGER range_valid
BEFORE INSERT OR UPDATE OF job_id,salary
ON employees
FOR EACH ROW
DECLARE
l_min_salary INTEGER;
l_max_salary INTEGER;
BEGIN
SELECT min_salary,max_salary
INTO l_min_salary,l_max_salary
FROM jobs
WHERE job_id = :new.job_id;
IF :new.salary < l_min_salary
OR :new.salary > l_max_salary
THEN
raise_application_error('Salario debe estar en el rango de' || l_min_salary || ' and ' || l_max_salary);
END IF;
END range_valid;
/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。