我已經定義了包規範中的記錄類型,表類型和函數。無法從函數返回表類型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內部,而不是從命令行。 –