Как опустошить коллекцию или удалить 1 элемент из нее?

Сергей Палыч
Дата: 27.11.2009 05:56:33
Вячеслав Любомудров
Дата: 27.11.2009 05:58:46
Не жалей подробностей
Сергей Палыч
Дата: 27.11.2009 07:26:36
Есть коллекция из текстовых строк например. Как мне удалить какую-либо строку по определенному условию (например, по содержимому строк, но это неважно...)?
Хохлов
Дата: 27.11.2009 07:31:16
collection_name.delete(index)
AlexFF__|
Дата: 27.11.2009 09:41:48
Хохлов
collection_name.delete(index)

[массив переменной длины].delete(index)
Сергей Палыч
Дата: 27.11.2009 09:57:52
DECLARE

  col TYPE_VARCHAR2:=TYPE_VARCHAR2();
  
BEGIN

  col.EXTEND();
  col(1):='1';
  col.EXTEND();
  col(2):='2';
  col.EXTEND();
  col(3):='3';
  col.EXTEND();
  col(4):='4';
  col.EXTEND();
  col(5):='5';
  
  FOR i IN 1..col.COUNT LOOP
    IF col(i)='3' THEN
      col.DELETE(i);
    END IF;
  END LOOP;
  
  FOR i IN 1..col.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(col(i));
  END LOOP;
  
END;
Создаю коллекцию из 5 строк. Далее в цикле удаляю строку, которая равна "3". При выводе содержимого коллекции возникает ошибка "data not found" после строки "2". Как сделать чтобы строка полностью удалилась, а индексы переприсвоились?
4ton
Дата: 27.11.2009 10:07:44
Сергей Палыч,

а вам обязательно нужны последовательные индексы в коллекции?
Просто перебирайте коллекцию не с помощью for, а
ind:=col.first;
while ind is not null loop
DBMS_OUTPUT.PUT_LINE(col(ind));
ond:=col.next(ind);
end loop;
4ton
Дата: 27.11.2009 10:08:33
4ton,

вместо "ond" читать "ind"
Elic
Дата: 27.11.2009 10:09:17
Владимир Ильич
Дата: 27.11.2009 10:10:44
  i := col.FIRST;
  WHILE i IS NOT NULL 
  LOOP
    DBMS_OUTPUT.PUT_LINE(i || ' ' || col(i));
    i := col.NEXT(i);
  END LOOP;