Функции Oracle-PL/SQL с вложенной таблицей возвращаемого типа. Тип ошибки неполный или неверный
CREATE TYPE dname AS OBJECT
(
depno NUMBER,
cnt_dname NUMBER
);
/
CREATE TYPE nt_dname_dname AS TABLE of dname;
/
CREATE OR REPLACE FUNCTION f1 RETURN nt_dname
AS
nt_dname t_d := t_d();
n NUMBER := 0;
BEGIN
FOR x IN
(
SELECT department_id, count(employee_id)
FROM employees
GROUP BY department_id
)
LOOP
nt_dname.EXTEND;
n := n+1;
nt_dname(n) := dname(x.depno,x.cnt_dname);
END LOOP;
RETURN t_d;
END;
/
Я получаю следующее сообщение об ошибке
Error: PL/SQL: Compilation unit analysis terminated
Error(1,20): **PLS-00320: the declaration of the type of this expression is
incomplete or malformed**
Пожалуйста, предложите, где это не так. Я пытаюсь получить количество сотрудников в каждом отделе и дать его в качестве выходного (RETURN nested_table).
1 ответ
Решение
Следующие компиляции, хотя я не проверял это:
create or replace function f1
return nt_dname_dname
as
t_d nt_dname_dname := nt_dname_dname();
n number := 0;
begin
for r in (
select department_id as depno
, count(employee_id) as cnt_dname
from employees
group by department_id
)
loop
t_d.extend;
n := n + 1;
t_d(n) := dname(r.depno, r.cnt_dname);
end loop;
return t_d;
end;
Лично я бы пересмотрел все названия, так как dname
, nt_dname_dname
а также t_d
немного сбивают с толку, по крайней мере для меня.