我有这样的类型声明:
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
...
答案 0 :(得分:6)
您可以使用以下条件:
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>
答案 1 :(得分:2)
使用VARRAY无法循环使用它。
可以使用关联表来完成:
DECLARE
TYPE stati_va IS TABLE OF NUMBER INDEX BY binary_integer;
l_array stati_va;
BEGIN
FOR i IN 1 .. 1000
LOOP
l_array(i) := dbms_random.random;
END LOOP;
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;
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作为此数组的键,任何值作为值
修改强> 我忘记了成员语法。由于它在sql(select语句)中表现得很奇怪,我们已经在我们的团队中禁止了它
它将是(使用varray或嵌套表) 如果是数组的关键成员那么......