Czy istnieje wbudowana funkcja do ustalenia (pierwszego) indeksu elementu w kolekcji PL/SQL?Uzyskiwanie indeksu elementu w kolekcji PL/SQL
Coś
DECLARE
TYPE t_test IS TABLE OF VARCHAR2(1);
v_test t_test;
BEGIN
v_test := NEW t_test('A', 'B', 'A');
dbms_output.put_line('A: ' || get_index(v_test, 'A'));
dbms_output.put_line('B: ' || get_index(v_test, 'B'));
dbms_output.put_line('C: ' || get_index(v_test, 'C'));
END;
A: 1
B: 2
C:
mogę używać asocjacyjnych, zagnieżdżone tabele lub Varrays, cokolwiek to konieczne. Jeśli ten sam element istnieje więcej niż jeden raz, wystarczający jest indeks pierwszego wystąpienia.
przeciwnym razie będę musiał zrobić coś takiego
CREATE FUNCTION get_index (in_test IN t_test, in_value IN VARCHAR2)
RETURN PLS_INTEGER
AS
i PLS_INTEGER;
BEGIN
i := in_test.FIRST;
WHILE(i IS NOT NULL) LOOP
IF(in_test(i) = in_value) THEN
RETURN i;
END IF;
i := in_test.NEXT(i);
END LOOP;
RETURN NULL;
END get_index;
To daje pierwszy i ostatni indeks wszystkich elementów, a nie pierwszy indeks elementu o określonej wartości. OP chce wiedzieć, jak znaleźć indeks odpowiadający pierwszemu pojawieniu się, powiedzmy, 9 w twoim przykładzie, który powinien zwrócić indeks numer 3, przed lub po usunięciu. –
@AlexPoole: Dzięki, nic więcej do powiedzenia :) –