Это
open cursorname for select...;
не
open cursorname;
for
[...procedural logic...]
Так как мы можем положиться на оптимизатор, чтобы выдвинуть предикаты, подобные этому, в представление, я бы написал это примерно так:
create or replace function search_for_games
( p_search_string in varchar2
, p_match_type in number )
return sys_refcursor
is
search_results sys_refcursor;
begin
open search_results for
select fixid, home, away, comp_name, m_time
from (
-- Type 0 matches:
select 0 as matchtype, fixid, home, away, comp_name, m_time from soccers
union all
select 0 as matchtype, fixid, home, away, comp_name, m_time from basketballb
union all
select 0 as matchtype, fixid, home, away, comp_name, m_time from handball h
union all
select 0 as matchtype, fixid, home, away, comp_name, m_time from ice_hockey i
union all
select 0 as matchtype, fixid, home, away, comp_name, m_time from tenis t
union all
select 0 as matchtype, fixid, home, away, comp_name, m_time from volleyball v
union all
-- Type 1 matches:
select 1 as matchtype, fixid, home, away, comp_name, m_time from table1
union all
select 1 as matchtype, fixid, home, away, comp_name, m_time from table2
) m
where m.matchtype = p_match_type
and ( m.home like p_search_string or m.away like p_search_string );
return search_results;
end search_for_games;
Предложение where
будет скопировано в отдельные разделы по мере необходимости.
Я не уверен, какую логику нужно реализовать с параметром p_match_type
, но приведенная выше структура должнавсе равно начни.