4

次のような型宣言があります。

  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
     ...
4

2 に答える 2

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;

END; /

この配列のキーとして binary_integer または varchar2 を使用でき、値として何でも使用できます

編集:メンバーの構文 を忘れてしまいました。SQL(選択ステートメント)で奇妙な動作をするため、チームで禁止しました

配列のキー・メンバーの場合、(VARRAYまたはNESTED TABLEを使用して) ...

于 2015-05-22T09:07:46.807 に答える