Получение индекса элемента в коллекции PL / SQL

Есть ли встроенная функция для определения (первого) индекса элемента в коллекции PL / SQL?

Что-то вроде

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: 

Я могу использовать ассоциативные массивы, вложенные Таблицы или варреи, что угодно. Если один и тот же элемент существует более одного раза, тогда достаточно индекса первого вхождения.


В противном случае мне пришлось бы сделать что-то вроде

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;
7
задан Peter Lang 29 April 2013 в 16:15
поделиться