Eu gostaria de criar uma variável de matriz na memória que possa ser usada no meu código PL / SQL. Não consigo encontrar nenhuma coleção no Oracle PL / SQL que use memória pura, todas elas parecem estar associadas a tabelas. Eu estou olhando para fazer algo parecido com isto no meu PL / SQL (sintaxe C #):
string[] arrayvalues = new string[3] {"Matt", "Joanne", "Robert"};
Edição: Oracle: 9i
Respostas:
Você pode usar o VARRAY para uma matriz de tamanho fixo:
Ou TABLE para uma matriz ilimitada:
A palavra "tabela" aqui não tem nada a ver com tabelas de banco de dados, de maneira confusa. Ambos os métodos criam matrizes na memória.
Com qualquer um destes, você precisa inicializar e estender a coleção antes de adicionar elementos:
O primeiro índice é 1 e não 0.
fonte
my_array(0) := 'some string';
array.extend();
EXTEND adiciona um slot a uma matriz limitada regular? Nesse caso, seu tamanho já é dinâmico, portanto, uma tabela (matriz ilimitada) não seria necessária.varray(3)
4 vezes - você recebe um erro "subscrito fora do limite".array.extend()
. Em todos os lugares em que eu olhei, isso não foi mostrado e foi a parte mais importante para poder adicionar mais de um item (pelo meu entendimento, ainda novo para matrizes no SQL).Você pode simplesmente declarar um DBMS_SQL.VARCHAR2_TABLE para manter uma matriz de comprimento variável na memória indexada por um BINARY_INTEGER:
Você pode usar uma matriz associativa (costumava ser chamada de tabelas PL / SQL), pois elas são uma matriz na memória.
A matriz associativa pode conter qualquer composição de tipos de registro.
Espero que ajude, Ollie.
fonte
VALUE_ERROR
quando a coleção está vazia. Eu sugiro que prefiro usarFOR i IN 1 .. employee_array.COUNT
neste casosys.odcivarchar2list
abaixo tem a vantagem de que você também tem um construtor na mão, por exemplo, para inicialização função param padrão:sys.odcivarchar2list('val1','val2')
Outra solução é usar um Oracle Collection como um Hashmap:
fonte
Você também pode usar um
oracle defined collection
Eu usaria matriz na memória. Mas com a
.COUNT
melhoria sugerida pela uziberia:Outra solução seria usar um Hashmap como o @Jchomel fez aqui .
NB:
Com o Oracle 12c, você pode consultar matrizes diretamente agora !
fonte
Exemplos de programas da seguinte forma e fornecidos no link também https://oracle-concepts-learning.blogspot.com/
tabela plsql ou matriz associada.
fonte