У меня есть функция plsql.И эта функция имеет запрос, как показано ниже:
select colum_name
from table_name
where filter_coloumn_name in ( select filter_coloumn_name from table_name_2);
Моя функция используется другим запросом для возврата значения из запроса.Этот запрос, который использует эту функцию, занимает больше времени.Даже сайт (передний экран) вниз.Потому что table_name_2 имеет три миллиона записей.Так что я должен использовать некоторый метод настройки производительности в моей функции.Я изменяю свой функциональный запрос, как показано ниже:
cursor my_cursor IS
select filter_coloumn_name from table_name_2;
TYPE cursor_array_type IS TABLE OF my_cursor%ROWTYPE INDEX BY BINARY_INTEGER;
m cursor_array_type;
TYPE cursor_table_type IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
cursor_table_object cursor_table_type;
fetch_size NUMBER := 5000;
index_var number;
begin
index_var := 1;
open my_cursor;
loop
FETCH my_cursor BULK COLLECT
into m LIMIT fetch_size;
exit when my_cursor %notfound;
for i in 1 .. m.count loop
cursor_table_object (index_var) := m(i).filter_coloumn_name;
index_var := index_var + 1;
end loop;
end loop;
Close my_cursor;
select colum_name
from table_name
where filter_coloumn_name in (cursor_table_object);
выберите имя столбца из имени таблицы, где filter_coloumn_name в (cursor_table_object);
А именно, я хочу получить все значения в одномвремя, а затем я хочу использовать этот объект таблицы, как указано выше.Но я не могу использовать табличный объект с условным выражением в запросе SQL.
Я принимаю PLS-00382: expression is of wrong type
ошибку.
Я хочу использовать этот табличный объект, как показано ниже:
select colum_name
from table_name
where filter_coloumn_name in ('bla', 'bla bla', 'bla bla bla');
Должен ли я преобразовать табличный объект в массив?