SP2-0552:未声明绑定变量"ELSE"?



我不明白为什么当我指定条件和处理时会出现这个错误

sql>declare
experience int;
salaire employees.salary%type;
begin
select datediff(year,getdate(),hire_date),employees.salary into experience,salaire from employees where employee_id=115;
dbms_output.put_line('Avant id=115 '||' experience='||experience||' salaire='||salaire);
if experience>10 then salaire=salaire*1.2;
elsif (experience>5 and experience <= 10) then salaire*1.1:
else salaire=salaire*1.05;
end if;
dbms_output.put_line('Apres id=115 '||' experience='||experience||' salaire='||salaire);
end;

当修复错误(:=而不是=;而不是:,不存在的函数(时,代码如下所示:

DECLARE
experience  INT;
salaire     employees.salary%TYPE;
BEGIN
SELECT EXTRACT (YEAR FROM SYSDATE) - EXTRACT (YEAR FROM e.hire_date),
e.salary
INTO experience, salaire
FROM employees e
WHERE e.employee_id = 115;
DBMS_OUTPUT.put_line (
'Avant id=115 '
|| ' experience='
|| experience
|| ' salaire='
|| salaire);
IF experience > 10
THEN
salaire := salaire * 1.2;
ELSIF (    experience > 5
AND experience <= 10)
THEN
salarie := salaire * 1.1;
ELSE
salaire := salaire * 1.05;
END IF;
DBMS_OUTPUT.put_line (
'Apres id=115 '
|| ' experience='
|| experience
|| ' salaire='
|| salaire);
END;

这取决于experience是什么;我刚从今年减去hire_date年。

此行不是Oracle:

select datediff(year,getdate(),hire_date),employees.salary
into experience, salaire
from employees
where employee_id = 115;

我可以推测你想要这样的东西:

select floor( months_between( sysdate, hiredate ) / 12 ),
employees.salary
into experience, salaire
from employees
where employee_id = 115;

这与你的逻辑并不完全相同。但考虑到datediff()的实际作用,它可能是experience的更好定义。

最新更新