我们可以在存储过程中将LIKE运算符与MEMBER OF运算符一起使用吗?

时间:2019-07-12 06:22:21

标签: sql oracle stored-procedures memberof

我有一个数据数组,可用来从表中选择行。为此,我在where子句中使用operator的成员。我想知道是否可以通过使用Like运算符和operator成员来做到这一点。

当我的阵列包括{德里,孟买,加尔各答} 我选择在其行中具有这三个值的行。 这是我的方法:

select ...
Into...
From xyz where city member of array;
///Receiving the array from an in parameter of the stored procedure.

它工作得很好。 但是如果my array has {Del, Mum, Kolk} //parts of the actual names 我如何将此数组用于相同的目的,也许使用Like运算符。

Create or replace zz2(ar in array_collection, c out sys_refcursor)
Is
anotherabc tablename.city%type
Begin
Open c
For
Select ABC
Into anotherabc
From tablename where city member of ar;
End zz2;

我希望输出的所有行中的城市都以数组中的字母/字符开头。使用运算符成员

2 个答案:

答案 0 :(得分:1)

像这样吗?

Select ABC
Into anotherabc a
From tablename WHERE EXISTS 
  ( select 1 FROM ( select column_value as city  
     FROM TABLE(ar) ) s where a.city like s.city||'%' )

答案 1 :(得分:0)

没有直接方法将LIKEMEMBER OF一起使用。

如果这是您的集合中包含城市名称的前三个字符的协议,那么您可以使用substr()仅匹配MEMBER OF中的前三个字符。

尝试以下操作:

DECLARE
  TYPE t_tab IS TABLE OF varchar(3);
  l_tab1 t_tab := t_tab('Del','Mom','Kol');
BEGIN
  DBMS_OUTPUT.put('Is ''Delhi'' MEMBER OF l_tab1? ');
  IF SUBSTR('Delhi',1,3) MEMBER OF l_tab1 THEN -- note the use of SUBSTR here
    DBMS_OUTPUT.put_line('TRUE');
  ELSE
    DBMS_OUTPUT.put_line('FALSE');  
  END IF;
END;
/

db<>fiddle demo

干杯!