Присвоение нуля ассоциативному массиву

#oracle #plsql #collections #associative-array

#Oracle #plsql #Коллекции #ассоциативный массив

Вопрос:

Я хотел присвоить NULL ассоциативному массиву. Как я могу это сделать?

 TYPE t_test IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
l_arr t_test;
l_arr:=NULL-- Which is giving error.
  

Комментарии:

1. Ассоциативный массив не может быть нулевым; вы имеете в виду, что хотите его очистить или присвоить определенной позиции значение null?

2. Я хочу очистить его. Или, если я хочу присвоить определенной позиции значение null, в этом случае я также могу, как я могу это сделать?

Ответ №1:

Я хочу очистить его.

Используйте delete метод сбора:

 l_arr.delete;
  

Или, если я хочу присвоить определенной позиции значение null, в этом случае я также могу, как я могу это сделать?

Просто присвоите null этой позиции:

 l_arr(2) := null;
  

Вы также можете удалить определенную позицию:

 l_arr.delete(1);
  

Демонстрация обоих:

 declare
  type t_test is table of pls_integer index by pls_integer;
  l_arr t_test;

  procedure show(p_label varchar2) is
    l_idx pls_integer;
  begin
    dbms_output.new_line;
    dbms_output.put_line(p_label || ': count = ' || l_arr.count);
    l_idx := l_arr.first;
    while l_idx is not null loop
      dbms_output.put_line('  ' || l_idx || ' -> ' || l_arr(l_idx));
      l_idx := l_arr.next(l_idx);
    end loop;
  end show;
begin
  l_arr(1) := 1;
  l_arr(42) := 42;

  show('a');

  l_arr(2) := null;
  show('b');

  l_arr.delete(1);
  show('c');

  l_arr.delete;
  show('d');
end;
/
  
 a: count = 2
  1 -> 1
  42 -> 42

b: count = 3
  1 -> 1
  2 -> 
  42 -> 42

c: count = 2
  2 -> 
  42 -> 42

d: count = 0


PL/SQL procedure successfully completed.