oracle sql varray 包含一个元素
oracle sql varray contains an element
我有这样的类型声明:
FUNCTION ...
IS
TYPE stati_va IS VARRAY (10000) OF varchar(1);
stati stati_va;
v_counter INTEGER := 0;
BEGIN
stati := stati_va ();
--this is actually in a loop so the array contains more values
v_counter := v_counter + 1;
stati.EXTEND;
stati (v_counter) := '4';
--here I would like to determine if the array 'stati' contains a value
到目前为止,我已经尝试了以下方法,但是这给了我一个错误
IF '4' member of stati then <- COMPILE error
IF '4' IN stati then <- COMPILE error
我知道遍历数组是可能的,但这有点不方便,因为我需要构建这样的东西:
IF array contains '4' then
elsif array contains '3' then
elseif array contains '2' then
...
您可以使用条件:
IF 'element' member OF <my_array> THEN
例如,
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 TYPE v_array
3 IS
4 TABLE OF VARCHAR2(200);
5 my_array v_array;
6 BEGIN
7 my_array := v_array('1','2','3','4');
8 IF '4' member OF my_array THEN
9 dbms_output.put_line('yes');
10 ELSE
11 dbms_output.put_line('no');
12 END IF;
13 END;
14 /
yes
PL/SQL procedure successfully completed.
SQL>
如果不循环使用 VARRAY,就无法做到这一点。
可以用关联table:
宣布
类型 stati_va 是 TABLE OF NUMBER INDEX BY binary_integer;
l_array stati_va;
开始
我在 1 .. 1000
环形
l_array(i) := dbms_random.random;
结束循环;</p>
<pre><code>IF (l_array.exists(4))
THEN
dbms_output.put_line(l_array(4));
END IF;
IF (l_array.exists(234234))
THEN
dbms_output.put_line('index exists');
ELSE
dbms_output.put_line('index doesnt' exist');
END IF;
结束;
/
您可以使用 binary_integer 或 varchar2 作为此数组的键,任何值作为值
编辑:
我忘记了 member 语法。由于它在 sql(select 语句)中表现异常,我们已在我们的团队中禁止它
它会是(使用 varray 或嵌套 table)
如果数组的关键成员那么...
我有这样的类型声明:
FUNCTION ...
IS
TYPE stati_va IS VARRAY (10000) OF varchar(1);
stati stati_va;
v_counter INTEGER := 0;
BEGIN
stati := stati_va ();
--this is actually in a loop so the array contains more values
v_counter := v_counter + 1;
stati.EXTEND;
stati (v_counter) := '4';
--here I would like to determine if the array 'stati' contains a value
到目前为止,我已经尝试了以下方法,但是这给了我一个错误
IF '4' member of stati then <- COMPILE error
IF '4' IN stati then <- COMPILE error
我知道遍历数组是可能的,但这有点不方便,因为我需要构建这样的东西:
IF array contains '4' then
elsif array contains '3' then
elseif array contains '2' then
...
您可以使用条件:
IF 'element' member OF <my_array> THEN
例如,
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 TYPE v_array
3 IS
4 TABLE OF VARCHAR2(200);
5 my_array v_array;
6 BEGIN
7 my_array := v_array('1','2','3','4');
8 IF '4' member OF my_array THEN
9 dbms_output.put_line('yes');
10 ELSE
11 dbms_output.put_line('no');
12 END IF;
13 END;
14 /
yes
PL/SQL procedure successfully completed.
SQL>
如果不循环使用 VARRAY,就无法做到这一点。
可以用关联table:
宣布
类型 stati_va 是 TABLE OF NUMBER INDEX BY binary_integer;
l_array stati_va;
开始
我在 1 .. 1000
环形
l_array(i) := dbms_random.random;
结束循环;</p>
<pre><code>IF (l_array.exists(4))
THEN
dbms_output.put_line(l_array(4));
END IF;
IF (l_array.exists(234234))
THEN
dbms_output.put_line('index exists');
ELSE
dbms_output.put_line('index doesnt' exist');
END IF;
结束; /
您可以使用 binary_integer 或 varchar2 作为此数组的键,任何值作为值
编辑: 我忘记了 member 语法。由于它在 sql(select 语句)中表现异常,我们已在我们的团队中禁止它
它会是(使用 varray 或嵌套 table) 如果数组的关键成员那么...