Я хотел бы создать переменную массива в памяти, которую можно было бы использовать в моем коде PL / SQL. Я не могу найти в Oracle PL / SQL коллекций, которые используют чистую память, все они, похоже, связаны с таблицами. Я хочу сделать что-то подобное в моем PL / SQL (синтаксис C #):
string[] arrayvalues = new string[3] {"Matt", "Joanne", "Robert"};
Изменить: Oracle: 9i
Ответы:
Вы можете использовать VARRAY для массива фиксированного размера:
Или ТАБЛИЦА для неограниченного массива:
Слово «таблица» здесь не имеет ничего общего с таблицами базы данных, что сбивает с толку. Оба метода создают массивы в памяти.
С помощью любого из них вам необходимо как инициализировать, так и расширить коллекцию перед добавлением элементов:
Первый индекс равен 1, а не 0.
источник
my_array(0) := 'some string';
array.extend();
ли EXTEND слот к обычному ограниченному массиву? В этом случае он уже имеет динамический размер, поэтому таблица (неограниченный массив) не понадобится.varray(3)
4 раза - вы получите ошибку «нижний индекс вне предела».array.extend()
. Везде, куда я смотрел, этого не было видно, и это была самая важная часть возможности добавить более одного элемента (насколько я понимаю, это все еще новинка для массивов в SQL).Вы можете просто объявить DBMS_SQL.VARCHAR2_TABLE для хранения массива переменной длины в памяти, индексированного BINARY_INTEGER:
Вы можете использовать ассоциативный массив (который раньше назывался таблицами PL / SQL), поскольку они представляют собой массив в памяти.
Ассоциативный массив может содержать любые типы записей.
Надеюсь, это поможет, Олли.
источник
VALUE_ERROR
когда коллекция пуста. Я бы посоветовал скорее использоватьFOR i IN 1 .. employee_array.COUNT
в этом случаеsys.odcivarchar2list
ниже имеет то преимущество, что у вас также есть конструктор под рукой, например, для инициализации параметра функции по умолчанию:sys.odcivarchar2list('val1','val2')
Другое решение - использовать Oracle Collection как Hashmap:
источник
Вы также можете использовать
oracle defined collection
Я бы использовал массив в памяти. Но с
.COUNT
улучшением, предложенным uziberia:Другое решение - использовать Hashmap, как здесь @Jchomel .
NB:
С Oracle 12c вы даже можете напрямую запрашивать массивы !
источник
Примеры программ, указанные ниже и также предоставленные по ссылке https://oracle-concepts-learning.blogspot.com/
таблица plsql или связанный массив.
источник