在Oracle / PL/SQL上,我知道我不能同时使用LIKE和IN子句来执行以下操作:
select * from booking_details where tags LIKE ('%val1%', '%val2%', 'val3%',....);
要达到上述目的,我可以这样做:
select * from booking_details where tags LIKE '%val1%' OR tags LIKE '%val2%' OR tags LIKE '%val3%' OR ... ;
我想把这个方法应用到我们现有的一个程序中。
function search_bookings( pi_search_string in varchar2 , po_bookings out booking_tbl_typ)
return integer as
t_booking_table booking_tbl_typ := booking_tbl_typ();
v_search_string varchar2(120) := pi_search_string;
begin
declare
result number;
begin
...
end;
select booking_typ (
booking_id
,...
)
bulk collect
into t_booking_table
from booking_details bd
where
...
and (bd.tags like '%'|| lower(v_search_string)||'%')
order by booking_id, start_date;
po_bookings := t_booking_table;
return c_success;
exception
when NO_DATA_FOUND then
return c_success;
when OTHERS then
log_error_msg(...);
v_excep_msg := sqlerrm;
return c_failure;
end search_bookings;
用户的应用程序基本上可以输入任何pi_search_string
,但目前它只适用于搜索一个标签。我希望将pi_search_string
拆分成关键字的空格和搜索多个标签的方式:
select * from booking_details where tags LIKE '%keyword1%' OR tags LIKE '%keyword2%' OR tags LIKE '%keyword3%' OR ... ;
因为查询会根据用户的输入而变化,所以我不确定这是否可以实现。
1条答案
按热度按时间waxmsbnn1#
您可以将
REGEXP_LIKE
与以下替换形式一起使用:在您的存储过程中,您只需要构建管道分隔的关键字字符串。