PLS-00103: Обнаружен символ "ТОГ" при ожидании одного из следующих

Я пытаюсь запустить этот код, но он дает мне ошибку в "ТОГДА", я проверил весь код построчно, и кажется, что ошибка в операторе if, но я дважды проверил его.

я пытаюсь сравнить время аварии, чтобы я мог отправить машину скорой помощи в аварию, которая произошла первой. Буду признателен за вашу помощь

`create or replace function get_loc return location is
max NUMBER;
CURSOR accident_records IS
SELECT * FROM NEW_ACCIDENT;
accidentRec NEW_ACCIDENT_TYPE := NEW_ACCIDENT_TYPE (NULL,NULL,NULL,NULL);
ac_loc LOCATION := LOCATION (NULL,NULL);
type New_accident_rec_type is record
(
id number,
loc location,
TIME NUMBER,
SITUATION varchar2(60)
);
new_accident_rec New_accident_rec_type;
BEGIN
max:=0;
OPEN accident_records;
LOOP FETCH accident_records INTO new_accident_rec;
EXIT WHEN accident_records%NOTFOUND;
IF new_accident_rec.situation='not handled' then
IF new_accident_rec.time>max THEN
max:=new_accident_rec.time;
accidentRec.time:=new_accident_rec.time;
ac_loc:=new_accident_rec.loc;
END IF;
IF new_accident_rec.time<max THEN
ac_loc:=NULL;
END IF;
END IF;
END LOOP;
CLOSE accident_records;
dbms_output.put_line ('The time of Accident is: '||accidentRec.time || 'The location of the accident is: ' ||ac_loc);
RETURN ac_loc;
END;`

1 ответ

Проблема в том, что у вас есть локальная переменная с именем max, который конфликтует с Oracle MAX агрегатная функция.

Ошибка возникает потому, что Oracle считает ( персонаж приходит после max, но он видит THEN вместо. Полный текст ошибки я вижу

LINE/COL ERROR
-------- -----------------------------------------------------------------
22/42    PLS-00103: Encountered the symbol "THEN" when expecting one of
         the following:
         (

(Возможно, я переформатировал ваш код до его запуска; не беспокойтесь, если номера строк / столбцов не совпадают.)

В PL/SQL обычно хорошей идеей является префикс локальных переменных с помощью l_ или же v_, А также избегая встроенных функций Oracle, таких как MAXЭто также помогает избежать конфликтов имен с именами столбцов, которые совпадают с вашей локальной переменной.

Надеюсь, если вы переименуете max переменная к l_max, ваша ошибка компиляции должна исчезнуть.

Другие вопросы по тегам