Создать таблицу
CREATE TABLE table_test (
col1 varchar(50),
col2 varchar(50)
)
После того, как вы введете данные в test_table
(используя что-то вроде следующего)
Begin
for i in 1..1000000 loop
Insert Into table_test values ('col1' || TO_CHAR(i), 'col2' || TO_CHAR(i));
end loop;
commit;
End;
/
Может сработать что-то вроде следующего. (Протестировано с использованием oracle live sql)
-- Create row definition
create OR REPLACE TYPE SOME_ROW_TYPE AS OBJECT
(
COL1 varchar2(50),
COL2 varchar2(50)
)
/
-- Create table definition
create type SOME_TABLE_TYPE as table of SOME_ROW_TYPE
/
CREATE OR REPLACE FUNCTION DoStuff RETURN SOME_TABLE_TYPE AS
-- Declarations
RET_TABLE SOME_TABLE_TYPE := SOME_TABLE_TYPE();
CURSOR DATA_FETCH IS
SELECT
COL1,
COL2
FROM TABLE_TEST;
BEGIN
FOR ITEM IN DATA_FETCH LOOP
RET_TABLE.extend;
RET_TABLE(RET_TABLE.LAST) := SOME_ROW_TYPE(
ITEM.COL1,
ITEM.COL2);
END LOOP;
RETURN RET_TABLE;
END;
/
Создание индекса
CREATE INDEX index_name ON table_test(col1)
выборка через
select * from DoStuff() WHERE col1 like 'col132%'