2007-07-30

Arrays em PL/SQL

Um ex-colega meu pediu-me para ajuda-lo a entender o mecanismo de Arrays no PL/SQL.

Existem os varray , nested tables e Associative Arrays.

--
Varray significa "Variable Array" e é um dos "collection types" do PL/SQL.
Um Varray guarda elementos de um mesmo tipo que é expecificado na sua declaração.
Os elementos serão chamados via o indice numérico.
Existem vários métodos para operar com os varray.




COUNT - retorno o numero de elemento da colecção.
EXISTS - retorna TRUE se existe um elemento nessa posição, senão retorna FALSE (logico!)
EXTEND(n) - aumenta a colecção em n elementos (vazios) (valor por omissão de n =1) não ultrapassando o limite definido na declaração do varray respectivo.
FIRST - vai para o 1º elemento
LAST - vai para o ultimo elemento
PRIOR - vai para o elemento anterior
NEXT - vai para o elemento seguinte
TRIM(n) - Remove os últimos n elementos da colecção (valor por omissão de n =1)
DELETE() - Remove todos os elementos da colecção


DECLARE
TYPE nomes_pessoas IS VARRAY(30) OF pessoas.nome%TYPE;
amigos nomes_pessoas;
L_posicao pls_integer;
BEGIN
amigos := nomes_pessoas('Tiago','Pedro', 'Ana');

L_posicao:=amigos.count();
dbms_output.put_line(L_posicao);
amigos.EXTEND(1);

amigos (amigos.LAST) := 'Vítor';

for i in amigos.FIRST..amigos.LAST loop
dbms_output.put_line(amigos(i));
end loop;
amigos.delete();
END;


Os varray não permite apagar um elemento (mas pode-se alterar).
---


Eu prefiro usar Associative Array


DECLARE
TYPE nomes_pessoas IS TABLE OF pessoas.nome%TYPE INDEX BY BINARY_INTEGER;
amigos nomes_pessoas;
L_posicao pls_integer;
BEGIN
amigos := nomes_pessoas('Tiago','Pedro', 'Ana');

L_posicao:=amigos.count();
dbms_output.put_line(L_posicao);

amigos (amigos.LAST) := 'Vítor';
amigos.delete(1);

for i in amigos.FIRST..amigos.LAST loop
dbms_output.put_line(to_char(i)||'-'||amigos(i));
end loop;
amigos.delete();
END;


no caso dos Associative Array e nested tables
DELETE(n) - Remove todos os elementos da colecção se n não for especificado e somente o elemento n se este for especificado

As nested tables são especialmente para interação com a BD.

Aconselho o livro "Oracle PL/SQL Programming" do Steven Feuerstein

No comments:

Post a Comment

Os comentários são moderados.
The comments are moderated.