And*_*ndy 8 oracle plsql oracle10g
我是PL-SQL的新手,并且努力寻找明确的操作文档是嵌套表.请更正任何误用的术语等.
我有一个嵌套的表类型,我用它作为存储过程的参数.
CREATE OR REPLACE TYPE "STRARRAY" AS TABLE OF VARCHAR2 (255)
Run Code Online (Sandbox Code Playgroud)
在我的存储过程中,表被初始化并填充.假设我有一个VARCHAR2变量,如果嵌套表中存在varchar,我想知道true或false.
我试过了
strarray.exists('somevarchar')
Run Code Online (Sandbox Code Playgroud)
但我得到一个ORA-6502
除了迭代之外,还有更简单的方法吗?
FOR i IN strarray.FIRST..strarray.LAST
LOOP
IF strarray(i) = value THEN
return 1;--found
END IF;
END LOOP;
Run Code Online (Sandbox Code Playgroud)
对于单值检查,我更喜欢"成员"运算符.
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>
Run Code Online (Sandbox Code Playgroud)
您可以使用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;
Run Code Online (Sandbox Code Playgroud)
如果字符串"KING"是l_enames集合的元素,将打印出"Found King".