この要件に関する限り、これは間違いなくデータ モデルの問題です。 2 つのオプションを提案できます:
オプション # 1: すべてのテーブルを組み合わせて 1 つのテーブル SPORTS を作成し、sport_type 列を持ちます。これにより、関数で 1 つの選択クエリを使用できるようになります。
select HOME,AWAY,COMP_NAME, M_TIME from SPORTS s where s.HOME LIKE (:p_search_string) or s.AWAY LIKE (:p_search_string) and sport_type in ( 'SOCCER', 'BASKETBALL', 'HANDBALL', 'ICE_HOCKEY', 'TENIST', 'VOLLEYBALL' )
プレ>オプション # 2:
Create a view by combining all these tables and select from that view in this function. CREATE OR REPLACE VIEW VW_SPORTS AS select HOME,AWAY,COMP_NAME, M_TIME, 'SOCCER' SPORT_TYPE from SOCCER union all select HOME,AWAY,LISTS,M_TIME,'BASKETBALL' SPORT_TYPE from BASKETBALL union all select HOME,AWAY,COMP,M_TIME,'HANDBALL' SPORT_TYPE from HANDBALL union all select HOME,AWAY,LISTS,M_TIME,'ICE_HOCKEY' SPORT_TYPE from ICE_HOCKEY union all select HOME,AWAY,COMP,M_TIME,'TENIST' SPORT_TYPE from TENISt union all select HOME,AWAY,LISTS,M_TIME,'VOLLEYBALL' SPORT_TYPE from VOLLEYBALL v; FUNCTION SEARACH_FOR_GAMES ( p_search_string in varchar2 ) return weak_cur IS SEARCH_FIXID WEAK_CUR; BEGIN OPEN SEARCH_FIXID FOR select HOME,AWAY,COMP_NAME, M_TIME from VW_SPORTS s where s.HOME LIKE (:p_search_string) or s.AWAY LIKE (:p_search_string) and s.SPOR_TYPE IN ( 'SOCCER', 'BASKETBALL', 'HANDBALL', 'ICE_HOCKEY', 'TENIST', 'VOLLEYBALL' ); RETURN SEARCH_FIXID; END SEARACH_FOR_GAMES;
プレ>