2014-09-08 1 views
-4

1.Что именно делает этот код?
2.Что такое номер (2)?Что делает этот код? и что такое функция «число (2)»?

cursor c1 is  
select employee_id, department_id, commission_pct from hr.employees; 
emprec c1%rowtype; 
v_hike number(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; 
+0

где у вас? что делает полная система? у вас нет никакой подсказки? – Nanne

+1

Почему вы отметили MySQL на вопрос о Oracle? – Sathya

+1

Почему вы отметили это как mysql? Вы получили это от [здесь] (http://www.srikanthtechnologies.com/oracle/dec9/hrqueries.html)? Так или иначе...'number (2)' не является функцией, это [объявление переменной] (http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/fundamentals.htm#LNPLS00202). Пожалуйста, ознакомьтесь с документацией, чтобы понять это и остальную часть этого кода. –

ответ

0

Это оракул определение курсора .. Что именно в том, что часть SQL делает так трудно понять, как сильно вы можете прочитать его.

В первой строке вы можете видеть, какой элемент работает со множеством строк. Затем вы определяете локальную переменную. v_hike. В цикле он делает некоторые выражения, такие как count v_hike, а затем устанавливает новую зарплату работодателю

номер (2) неверно написал (а): number (p, s) где ps цифры до десятичной и s цифр после decimal ..

+2

'номер (2)' действительно; тип данных [показан как «NUMBER [(p [, s])]' в документах (http://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements001.htm#SQLRF30020) , поэтому имеет значение 'number',' number (p) 'или' number (p, s) '. –

+0

Спасибо, Алекс. Я никогда не замечал этого факта. –

+0

где p - точность, а s - масштаб. –

0

Что именно делает этот код?

Прежде всего, в 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.