Если вы хотите выбрать много строк в таблице plsql, вы можете использовать массовый сбор:
select * BULK COLLECT into type1 from deduporiginal where rownum < 125;
обновление: , если вы хотите вернуть type1:
Я не думаю, что вы можете создать объект типа вне функции, которая использует% ROWTYPE, поэтому вам, вероятно, придется упаковать все это в пакет:
CREATE OR REPLACE PACKAGE package_name IS
TYPE OriType IS TABLE OF deduporiginal%ROWTYPE;
FUNCTION dedup_temp RETURN OriType ;
END package_name ;
/
CREATE OR REPLACE PACKAGE BODY package_name IS
FUNCTION dedup_temp RETURN OriType IS
type1 OriType;
num number;
begin
select count(1) into num from deduporiginal;
select * BULK COLLECT into type1 from deduporiginal where rownum < 125;
for i in 1 .. type1.count
loop
DBMS_OUTPUT.put_line('v_month_va(i): '||type1(i).name);
end loop;
return type1 ;
end dedup_temp;
END package_name ;
/
но я уверен, что вы сможете использовать его в выбранном статусе как:
select package_name.dedup_temp() from dual;
Для выполнения чего-то подобного вам нужна конвейерная функция