SP2-0552: переменная связывания "ELSE" не объявлена? - PullRequest
0 голосов
/ 09 апреля 2020

Я не понимаю, почему эта ошибка появляется, когда я указал условия и лечение

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;

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Когда исправлены ошибки (:= вместо =, ; вместо :, несуществующие функции), тогда код выглядит так:

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 год из текущего года.

0 голосов
/ 09 апреля 2020

Эта строка не 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;

Это не совсем те же логики c, что у тебя есть. Но, вероятно, это лучшее определение experience, учитывая, что на самом деле делает datediff().

...