Как сохранить только один столбец значений таблицы в массив? - PullRequest
0 голосов
/ 20 февраля 2019

Мой запрос возвращает что-то вроде этого:

enter image description here

Я хочу сохранить каждое значение в массив.Я знаю, как сохранить каждый столбец строки, используя SELECT INTO, но я не знаю, как сохранить строки таблицы только с одним столбцом.

Я хотел бы получить это:

my_array(1) = 11111
my_array(2) = 22222
my_array(3) = 33333
....

Длина массива равна 6. Я знаю, что мой запрос не будет возвращать более 6 строк.Если запрос возвращает менее 6 строк, можно ли поместить NULL в элемент массива, где для него нет строк?

1 Ответ

0 голосов
/ 20 февраля 2019

Как предлагается в комментарии, вы можете использовать BULK COLLECT

select your_col BULK COLLECT 
 INTO your_collection from my_array where some_condition = 'something';

Относительно вашего вопроса

, если запрос возвращает менее 6 строк, можно ли поместить NULL в массивэлемент, в котором для него нет строк

Вы не сказали, почему это требуется, но BULK COLLECT создаст столько элементов в массиве, сколько строк представлено в результате запроса.Если вам нужны элементы NULL, вы можете использовать методы сбора count и extend для проверки и выделения пустых элементов до тех пор, пока счетчик не станет равным 6.

DECLARE
TYPE myarrtype is table of integer;
my_array myarrtype;
BEGIN
  select level bulk collect into my_array from dual 
  connect by level <= 4; --generates 4 integers 1-4 and loads into array.
    dbms_output.put_line('OLD COUNT '||my_array.count);

  if my_array.count <= 6 then
     my_array.extend(6 - my_array.count); --This appends required number of 
                                          --NULL elements   
  dbms_output.put_line('NEW COUNT '||my_array.count);
  end if;
END;
/

Вывод

1 rows affected

dbms_output:
OLD COUNT 4
NEW COUNT 6

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...