我已经定义了包规范中的记录类型,表类型和函数。无法从函数返回表类型PLSQL
TYPE name_RECORD IS RECORD (
name VARCHAR2(244),
surname VARCHAR2(244));
TYPE name_TABLE IS TABLE OF name_RECORD;
function f_deps
(i_id_dept IN employees.id_department%type)
return name_TABLE;
并写了封装体内返回表类型的函数。
function f_deps
(i_id_dept IN employees.id_department%type)
return name_TABLE is
CURSOR c1 IS (select * from employees);
t_name name_TABLE;
rec_name name_RECORD;
BEGIN
t_name := name_TABLE();
for i in c1
LOOP
select name, surname BULK COLLECT INTO t_name from employees where id_department = i_id_dept ;
END LOOP;
return t_name;
END f_deps;
功能编译正常,但是当我尝试这样的执行功能:
select * from table(PACKAGE_employees.f_deps ('6')) ;
我得到这个错误:
ORA-00902: invalid datatype
00902. 00000 - "invalid datatype"
*Cause:
*Action:
Error at Line: 29 Column: 22
更新:我已经定义类型的CREATE TYPE语句在命令行中,像Bob Jarvis所建议的那样,但我仍然得到相同的错误消息
create or replace type name_RECORD as object (
name VARCHAR2(244),
surname VARCHAR2(244));
create or replace type name_TABLE AS TABLE OF name_RECORD;
包中创建的类型不能在SELECT语句中使用。 SELECT语句只能使用使用CREATE TYPE创建的类型。祝你好运。 –
好的,谢谢你的回答。 – Tom
在12C中并非如此 - 但类型需要在包**规范**中定义而非正文。但我认为只在PL/SQL内部,而不是从命令行。 –