Как сделать селект в в коллекцию с пользовательским типом данных?
Например, есть таблица:
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
И сейчас ваша функция не возвращает никакого результат, это странно.
Комментариев нет:
Отправить комментарий