Кто знает?Сама процедура выглядит нормально (кроме того факта, что вы открыли курсор КОМАНДЫ и извлекли его из ZESPOL (который никогда не был объявлен).
- может быть регистром букв (это имена, написанные в нижнем / верхнем регистре)/ смешанный регистр)?
- Вас смущает порядок параметров? Фамилия первая, имя следующее? Должно ли это быть наоборот (т.е.
imi VARCHAR2, nazw VARCHAR2
) - всегда используйте псевдонимы, особенно когда вы используете одну и ту же таблицу дважды (или более раз)
Вот тестовый пример, который показывает, что работает , если вы используете его правильно. Обратите внимание, что яЯ переключился на цикл курсора FOR, который легче поддерживать.
SQL> create table people
2 (id_ppl number,
3 name varchar2(10),
4 surname varchar2(10),
5 id_manager number);
Table created.
SQL> insert all
2 into people values (1, 'Little', 'Foot', 1) --> the same ...
3 into people values (2, 'Big' , 'Foot', 1) --> ... manager
4 into people values (3, 'Stack' , 'Over', 2)
5 select * from dual;
3 rows created.
SQL> set serveroutput on;
Процедура:
SQL> create or replace procedure ex_2h (p_nazw in varchar2, p_imi in varchar2)
2 is
3 begin
4 for tmp in (select p.name from people p
5 where p.id_manager = (select p1.id_ppl
6 from people p1
7 where p1.name = p_imi
8 and p1.surname = p_nazw
9 )
10 )
11 loop
12 dbms_output.put_line(nvl(tmp.name, '?'));
13 end loop;
14 end;
15 /
Procedure created.
Проверка:
SQL> exec ex_2h('Foot', 'Little');
Little
Big
PL/SQL procedure successfully completed.
SQL>
Я предлагаюпопробуйте это таким образом. Если это не сработает, пожалуйста, опубликуйте дополнительную информацию - CREATE TABLE и примеры данных, чтобы мы могли увидеть, что у вас есть на самом деле и как Oracle реагирует (и почему).