Kursor

0

Cześć mam takie zadanie:
"Zadeklaruj zmienne: v_min, v_max do przechowywania dolnej i górnej granicy zarobków oraz
v_id_od przechowującą identyfikator oddziału, nadaj ostatniej zmiennej wartość 50. Zadeklaruj
kursor do pobierania imienia, nazwiska, pensji pracowników z oddziału o identyfikatorze zapisanym
w zmiennej v_id_od. Napisz pętlę wyświetlającą imiona i nazwiska pracowników, których pensja
mieści się w przedziale wskazanym przez użytkownika (v_min; v_max)."

Rozwiązanie jakie póki co wymyśliłem to:

accept v1 prompt 'Podaj minimalna wartosc: ';
accept v2 prompt 'Podaj max wartość: ';
declare
v_min employees.salary%type:=&v1;
v_max employees.salary%type:=&v2;
v_id_od departments.department_id%type:=50;
Cursor kursor is
select employees.FIRST_NAME, employees.last_name, employees.salary from employees
where department_id=v_id_od;
begin
OPEN kursor;
for employees in reverse v_min..v_max loop
dbms_output.put_line(first_name||' '||last_name);
end loop;
close kursor;
end;
/

Niestety nie działa poprawnie błąd jaki otrzymałem to:
Error report -
ORA-06550: line 11, column 30:
PLS-00201: identifier 'FIRST_NAME' must be declared
ORA-06550: line 11, column 9:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:

Co robię nie tak jak trzeba? po end na końcu i przed znakiem / podkreśla mi się również na czerwono jakby tam czegoś brakowało.

2
  1. W dbms_output.put_line(first_name||' '||last_name); odnosisz się do first_name i last_name, których nie masz zdefiniowanych jako zmienne. To i oracle się skarży.
  2. Pętla wygląda na niepoprawną.
  3. Doczytaj jak wygląda praca z kursorami: https://blogs.oracle.com/oraclemagazine/working-with-cursors
0

Ok dzięki za info .
Jak wrócę z roboty to się tym zajmę.

0

@yarel
Zapomniałem pochwalić się rozwiązaniem.
Może się komuś przyda

accept v1 prompt 'Podaj minimalna wartosc: ';
accept v2 prompt 'Podaj max wartość: ';
declare
v_first_name employees.first_name%TYPE;
v_last_name employees.last_name%TYPE;
v_salary employees.salary%type;
v_min employees.salary%type:=&v1;
v_max employees.salary%type:=&v2;
v_id_od departments.department_id%type:=50;
Cursor kursor is
select FIRST_NAME , last_name, salary from employees
where department_id=v_id_od and salary between v_min and v_max;
begin
OPEN kursor;
loop
fetch kursor into v_first_name, v_last_name, v_salary;
exit when kursor%notfound;
dbms_output.put_line(v_first_name||' '||v_last_name||' '||v_salary);
end loop;
dbms_output.put_line('Liczba pracowników '||kursor%rowcount);
close kursor;
end;
/

1 użytkowników online, w tym zalogowanych: 0, gości: 1