Вы должны передать индекс массива, а не значение массива, в exists
на тот случай, если вы хотите определить, существует ли этот элемент в коллекции. Вложенные таблицы индексируются целыми числами, поэтому ссылаться на них по строкам невозможно.
Однако вы можете захотеть смотреть на ассоциативные массивы, а не на коллекции, если вы хотите сослаться на элемент массива по строковому индексу. Это будет выглядеть так:
DECLARE
TYPE assocArray IS TABLE OF VARCHAR2(100) INDEX BY VARCHAR2(100);
myArray assocArray;
BEGIN
myArray('foo') := 'bar';
IF myArray.exists('baz') THEN
dbms_output.put_line(myArray('baz'));
ELSIF myArray.exists('foo') THEN
dbms_output.put_line(myArray('foo'));
END IF;
END;
По сути, если значения вашего массива различны, вы можете создать парные массивы, ссылающиеся друг на друга, например,
arr('b') := 'a'; arr('a') := 'b';
Эта техника может помочь вам легко найти любой элемент и его индекс.