Страницы

Поиск по вопросам

понедельник, 8 апреля 2019 г.

Селект в коллекцию с пользовательским типом данных

Как сделать селект в в коллекцию с пользовательским типом данных?
Например, есть таблица:
create table emp ( empno number(4,0), ename varchar2(10), job varchar2(9), mgr number(4,0), hiredate date, sal number(7,2), comm number(7,2), deptno number(2,0), constraint pk_emp primary key (empno), constraint fk_deptno foreign key (deptno) references dept (deptno) )
Cоздаю пользовательский тип:
CREATE OR REPLACE TYPE typ_emp as OBJECT ( name VARCHAR2(20), deptno VARCHAR2(20) );
CREATE OR REPLACE TYPE emp_tbl AS TABLE OF typ_emp;
Пишу функцию:
CREATE OR REPLACE FUNCTION getEmpl RETURN emp_tbl AS tbl emp_tbl ; BEGIN SELECT e.ENAME, e.DEPTNO INTO tbl FROM EMP e; RETURN tbl; END;
Компиляция с ошибками:
PL/SQL: ORA-00947: not enough values PL/SQL: SQL Statement ignored


Ответ

Вам надо обернуть результат запроса в нужный тип и извлекать через bulk collect into
CREATE OR REPLACE FUNCTION getEmpl RETURN emp_tbl AS tbl emp_tbl ; BEGIN SELECT typ_emp(e.ENAME, e.DEPTNO) BULK COLLECT INTO tbl FROM EMP e; END;
Чуть больше примеров на en-so
И сейчас ваша функция не возвращает никакого результат, это странно.

Комментариев нет:

Отправить комментарий