Что именно делает этот код?
Прежде всего, в Oracle PL/SQL, синтаксически неверно, так как вы пропустили DECLARE ключевое слово в PL/SQL анонимного блока. Вы получите ошибку компиляции.
Позвольте мне объяснить, шаг за шагом:
cursor c1 is
select employee_id, department_id, commission_pct from hr.employees;
emprec c1%rowtype;
Это явный курсор, это рабочая область для хранения информации при обработке запроса на выборку. И emprec - это тип коллекции, который будет содержать набор результатов при выдаче инструкции FETCH.
v_hike number (2);
Это переменная, объявленная для типа данных NUMBER. НОМЕР (2) означает, что он может содержать числовое значение с точностью 2.
begin
open c1;
loop
fetch c1 into emprec;
exit when c1%notfound;
if emprec.department_id = 40 then v_hike := 10;
elsif emprec.department_id = 70 then v_hike := 15;
elsif emprec.commission_pct > 0.30 then v_hike := 5;
else v_hike := 10;
end if;
update employees set salary = salary + salary * v_hike/100
where employee_id = emprec.employee_id;
end loop;
end;
Следующие шаги,
с. Открыть курсор
b. для каждой строки курсора, проведите цикл и подготовьте сборку в emprec
c. Когда нет записей для извлечения из курсора, тогда выйдите
d. Назначьте числовое значение переменной v_hike на основе конструкции IF-ELSE .
e. выполните инструкцию UPDATE.
f. Выходите из петли.
g. Объем блока заканчивается ключевым словом END.
где у вас? что делает полная система? у вас нет никакой подсказки? – Nanne
Почему вы отметили MySQL на вопрос о Oracle? – Sathya
Почему вы отметили это как mysql? Вы получили это от [здесь] (http://www.srikanthtechnologies.com/oracle/dec9/hrqueries.html)? Так или иначе...'number (2)' не является функцией, это [объявление переменной] (http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/fundamentals.htm#LNPLS00202). Пожалуйста, ознакомьтесь с документацией, чтобы понять это и остальную часть этого кода. –