表达式是错误的类型

时间:2016-05-23 18:57:49

标签: plsql oracle11g

我正在尝试创建一个返回emp表的所有值的函数为什么我会收到错误?

enter image description here

create or replace FUNCTION EMP_value 
RETURN VARCHAR2
is
CURSOR a is select * from emp;
v_all  emp%rowtype;
begin
open a;
LOOP
fetch a into v_all;
exit when a%notfound;
dbms_output.put_line(v_all.empno|| '  ' ||v_all.ename|| '  ' ||v_all.sal);
RETURN V_ALL;
end loop;
close a;
end;

1 个答案:

答案 0 :(得分:0)

尝试尽可能简化代码。如果要从函数返回游标的所有属性,请尝试使用BULK collect并将其作为复杂数据类型返回。在这种情况下,它的嵌套表类型。希望它有所帮助。

    --Create a schema level nested table type function

CREATE OR REPLACE TYPE emp_obj IS OBJECT
(
EMPNO NUMBER,
ENAME VARCHAR2(100),
SAL NUMBER,
MGR_NO NUMBER,
HIREDATE DATE
)
/

CREATE OR REPLACE TYPE emp_tab IS TABLE OF emp_obj
/



--Funtion to return all attributes from EMP tab
CREATE OR REPLACE FUNCTION EMP_value 
RETURN emp_tab
AS
e_tab emp_tab;
begin
SELECT * BULK COLLECT INTO e_tab
FROM EMP;
RETURN e_tab;
end;
/