Как исправить Обнаружил символ «ГДЕ» при ожидании одного из следующих и {

я сдаю СТАРЫЙ экзамен для своих следующих экзаменов, и я столкнулся с этими проблемами:

**1-** ORA-06550: line 18, column 1:
PLS-00103: Encountered the symbol "{" when expecting one of the following:


**2-** ORA-06550: line 23, column 1:
PLS-00103: Encountered the symbol "WHERE" when expecting one of the following:

я пробовал много вещей, например, изменить IF statement для поиска ошибок типа ( ; '' ) missing и т. д., но ничего не работает

Код :

declare

cursor cur is select * from emp where sal > 0 order by sal ;

enreg emp%rowtype;

x number;

i number;

chaine dept.ename%type;

begin 

open cur;

select count ename into x from emp where sal > 0;

i:=0;

loop

fetch cur into enreg;

i:=i+1;

IF i<x/4 THEN 

{

dbms_output.put_line('le nom du ' || i || 'salairié est '|| enreg.ename);

dbms_output.put_line('lancien salaire du ' || i || 'salairié est '|| enreg.sal);

update emp

set emp.sal = emp.sal+((emp.sal*4)/100);

WHERE emp.sal = enreg.sal;

select dname from dept into chaine where dept.deptno=enreg.deptno;

enreg.sal := emp.sal;

dbms_output.putline('le depart  du ' || i || 'salairié est '|| chaine);

dbms_output.putline('le nouveau salaire du ' || i || 'salairié est '|| enreg.sal);

}

elseif i>=x/4 and i<=x/2 then 

{

dbms_output.putline('le nom du ' || i || 'salairié est '|| enreg.ename);

dbms_output.putline('lancien salaire du ' || i || 'salairié est '|| enreg.sal);

update emp

set emp.sal = emp.sal+((emp.sal*6)/100);

where emp.sal=enreg.sal;

select dname from dept into chaine where dept.deptno=enreg.deptno;

enreg.sal := emp.sal;

dbms_output.put_line('le depart  du ' || i || 'salairié est '|| chaine);

dbms_output.put_line('le nouveau salaire du ' || i || 'salairié est '|| enreg.sal);

}

else 

{

dbms_output.put_line('le nom du ' || i || 'salairié est '|| enreg.ename);

dbms_output.put_line('lancien salaire du ' || i || 'salairié est '|| enreg.sal);

update emp

set emp.sal = emp.sal+((emp.sal*8)/100);

where emp.sal=enreg.sal;

select dname from dept into chaine where dept.deptno=enreg.deptno;

enreg.sal := emp.sal;

dbms_output.putl_ine('le depart  du ' || i || 'salairié est '|| chaine);

dbms_output.put_line('le nouveau salaire du ' || i || 'salairié est '|| enreg.sal);

}

end if ;

exit when cur%notfound;

end loop;

end;

КОНЕЦ КОД

the expected results is to upgrade the salary 
the first 1/4 of salaries have 4% upgrade
the other 1/4 have 6 % 
the rest 8%
in the same time and with one cursor i must display the old value of the sal and the new value  and the name of the person + the department which he is in it 
  • таблицы:

    эмп (

    НОМЕР EMPNO(4,0) Нет - 1

    ИМЯ VARCHAR2(10)

    РАБОТА VARCHAR2(9) НОМЕР МГР(4,0)

    ДАТА АРЕНДА

    НОМЕР САЛОН(7,2)

    НОМЕР СВЯЗИ(7,2)

    НОМЕР ОТДЕЛА(2,0)

    )

    отдел (

    НОМЕР ОТДЕЛА(2,0)

    DNAME VARCHAR2(14)

    ЛОК ВАРЧАР2(13)

    )

Фигурные скобки — {} — ничего не значат в PL/SQL, вам нужно использовать правильный синтаксис и логические конструкции. Подробнее. У вас также есть точка с запятой в конце строки с set, в строке перед where. В сообщениях об ошибках указываются строки, на которые следует обратить внимание (хотя во втором случае проблема действительно в предыдущей строке...)

Alex Poole 31.05.2019 00:38
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
1
178
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

select count ename into x from emp where sal > 0;

Этот синтаксис для этого оператора является недопустимым. См. Функция подсчета.

update emp
set emp.sal = emp.sal+((emp.sal*4)/100);
WHERE emp.sal = enreg.sal;

Эти операторы вместе взятые также имеют недопустимый синтаксис. Кажется, вы думаете, что точка с запятой - ; - указывает на конец строки, но на самом деле указывает на конец оператора. Я представляю, что вам не нужен первый - он действительно действителен, но обновит каждую строку в таблице. Без этой точки с запятой будет обновлено только подмножество строк, но это подмножество будет каждой соответствующей зарплатой, включая уже обновленные. См. Обновление в курсоре

Пара общих замечаний.
Ваша процедура содержит много ненужных повторений. 3 оператора обновления для EMP и соответствующие выборки для таблицы DEPT. Вместо этого вы можете определить переменную для процента (рассчитывается как 4, 6 или 8) в зависимости от ситуации, а затем использовать эту переменную в одном обновлении. И еще один шаг, вы можете ПРИСОЕДИНИТЬСЯ к DEPT к EMP в курсоре, и тогда вам не потребуется независимый выбор для каждой обрабатываемой строки. Просто способ подумать об обработке наборов, а не отдельных строк.
Все в дополнение к тому, что указал @AlexPoole.

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