create or replace type CTest as object
(
tid varchar2(6),
tname varchar2(20)
)
create table SSS
(
  ID     NUMBER,
  VALUE1 NUMBER
)insert into sss values(1,2);
/
create or replace type tabCtest is table of cTest/
create or replace function myTest return tabctest
is
Result tabctest := tabctest();  begin
Result := tabctest();  execute immediate 'CREATE GLOBAL TEMPORARY TABLE AAA (NUM VARCHAR2(10),QTY INTEGER) ON  COMMIT  DELETE ROWS ';  execute immediate 'insert into AAA SELECT * FROM sss';
  
Result.extend;
Result(Result.count) := CTEST(NULL,NULL);
Result(Result.count).tid := '1';
Result(Result.count).tname := 'name1';Result.extend;
Result(Result.count) := CTEST(NULL,NULL);
Result(Result.count).tid := '2';
Result(Result.count).tname := 'name2';
return(Result);
end myTest;
/select *
from table(cast(myTest as tabctest))