0

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

当我的数组由 {Delhi, Mumbai, Kolkata} 组成时,我选择行中具有这三个值的行。我就是这样做的:

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;

我希望输出包含所有以数组中的字母/字符开头的城市的行。使用操作员的成员

4

2 回答 2

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||'%' )
于 2019-07-12T06:30:44.907 回答
0

没有直接使用LIKEwith 的方法MEMBER 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<>小提琴演示

干杯!!

于 2019-07-12T06:40:40.780 回答