oracle 嵌套表查询语句,在Oracle嵌套表中查找特定的varchar

4 个答案:

答案 0 :(得分:8)

对于单值检查,我更喜欢“成员”操作符。

zep@dev> declare

2 enames strarray;

3 wordToFind varchar2(255) := 'King';

4 begin

5 select emp.last_name bulk collect

6 into enames

7 from employees emp;

8 if wordToFind member of enames then

9 dbms_output.put_line('Found King');

10 end if;

11 end;

12 /

Found King

PL/SQL procedure successfully completed

zep@dev>

答案 1 :(得分:5)

您可以使用MULTISET INTERSECT运算符来确定您感兴趣的字符串是否存在于集合中。例如

declare

l_enames strarray;

l_interesting_enames strarray := new strarray( 'KING' );

begin

select ename

bulk collect into l_enames

from emp;

if( l_interesting_enames = l_interesting_enames MULTISET INTERSECT l_enames )

then

dbms_output.put_line( 'Found King' );

end if;

end;

如果字符串“KING”是l_enames集合的元素,

将打印出“Found King”。

答案 2 :(得分:3)

如果您想确定此元素是否存在于集合中,则应将数组索引而不是数组值传递给exists。嵌套表由整数索引,因此无法通过字符串引用它们。

但是,如果您希望通过字符串索引引用数组元素,则可能需要查看关联数组而不是集合。这将是这样的:

DECLARE

TYPE assocArray IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(100);

myArray assocArray;

BEGIN

myArray('foo') := 'bar';

IF myArray.exists('baz') THEN

dbms_output.put_line(myArray('baz'));

ELSIF myArray.exists('foo') THEN

dbms_output.put_line(myArray('foo'));

END IF;

END;

基本上,如果您的数组值不同,您可以创建彼此引用的成对数组,例如,

arr('b') := 'a'; arr('a') := 'b';

这项技术可以帮助您轻松查找任何元素及其索引。

答案 3 :(得分:3)

当嵌套表被声明为模式级类型时,就像您所做的那样,它可以在任何SQL查询中用作表。所以你可以编写一个简单的函数:

CREATE OR REPLACE FUNCTION exists_in( str VARCHAR2, tab stararray)

RETURN BOOLEAN

AS

c INTEGER;

BEGIN

SELECT COUNT(*)

INTO c

FROM TABLE(CAST(tab AS strarray))

WHERE column_value = str;

RETURN (c > 0);

END exists_in;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值