我不明白为什么当我指定条件和处理时会出现这个错误
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
的更好定义。