segunda-feira, 23 de novembro de 2009

Utilizando Vetores no Oracle - Parte 1

1. Introdução

Este artigo representa o primeiro de uma série de trabalhos que irão abordar as características e as formas de manipulação de vetores no Oracle. Este SGBD disponibiliza um tipo de dados específico para a representação de vetores (tanto em programas PL/SQL, como em colunas de tabelas), denominado VARRAY (variable-size array), cujos conceitos básicos serão apresentados neste texto.

2. Utilização de vetores no em Programas PL/SQL

Assim como em qualquer linguagem de programação, um vetor em PL/SQL representa um grupo de posições contíguas em memória que possuem o mesmo nome e o mesmo tipo. A Figura 1 ilustra um exemplo de vetor chamado “V” que contém 10 posições e armazena as notas médias dos alunos de um curso de programação em PL/SQL.


Figura 1. Vetor “V”  com 10 posições para armazenar notas médias de alunos.
 
Para referenciar um elemento (valor) no vetor, devemos utilizar o nome do vetor em questão e o índice (ou subscrito) do elemento que desejamos acessar entre parênteses. Tem-se, por exemplo, que V(7) constitui uma referência ao sétimo elemento do vetor V, cujo valor é 8.5. No entanto, o primeiro passo para a utilização de um vetor em PL/SQL consiste na sua declaração (criação). O código a seguir apresenta uma maneira que pode ser utilizada para declarar o vetor “V” dentro de um programa PL/SQL.

CREATE OR REPLACE PROCEDURE P_TESTE IS
TYPE tVETOR IS VARRAY(10) OF NUMBER(4,2); -- define o tipo do vetor
V tVETOR; --declara um vetor com o nome V e o tipo tVetor
BEGIN
     <corpo do programa...>
END;

No exemplo acima, o vetor foi “V” foi declarado dentro de uma procedure denominada P_TESTE. Para que o vetor pudesse ser declarado, primeiro foi necessário criar o seu tipo (com o uso do comando TYPE). Observe que foi criado um tipo denominado tVETOR, que especifica um vetor de 10 posições para valores do tipo NUMBER(4,2). Após a definição do tipo é que deve  ocorrer, de fato, a declaração do vetor. Em nosso exemplo, o vetor foi declarado com nome V e com o tipo tVETOR. É importante saber que, uma vez declarado, um vetor não poderá ser redimensionado durante a execução do programa PL/SQL.



Para que qualquer elemento do vetor possa ser referenciado dentro do corpo do programa, é preciso que este seja inicializado - caso contrário o PL/SQL irá disparar uma exceção (ou seja, um erro. Os diferentes tipos exceção serão examinados no próximo artigo desta série). Para exemplificar o processo de inicialização de vetores, considere a função F_APROVADOS, cuja especificação é apresentada na Figura 2. Esta função cria e preenche um vetor contendo a média final de 10 alunos. Em seguida, o vetor é percorrido por um loop (comando for) e o número de alunos aprovados é contabilizado (alunos cuja média final é igual ou superior a 7.0). O resultado deste cálculo é retornado pela função para o usuário.


Figura 2. Função F_APROVADOS

Examinando a função F_APROVADOS, é possível observar a declaração do vetor V nas linhas 3 e 4. Na linha 9 ocorre a inicialização do vetor. São atribuídos valores para cada uma de suas 10 posições (note que são os mesmos valores apresentados na Figura 1!). Para inicializar nosso VARRAY, utilizou-se um construtor, que representa uma função de sistema (automaticamente criada pelo PL/SQL) que possui o mesmo nome do tipo do vetor V (tVetor).

V := tVETOR(7.8, 5.0, 8.5, 9.0, 6.4, 10.0, 8.5, 8.6, 7.5, 9.2);

Com a utilização do construtor, seria possível também inicializar o vetor com o valor zero em todas as suas dez posições, conforme indica o exemplo a seguir:

V := tVETOR(0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

O detalhe mais importante que você precisa saber é o seguinte: no PL/SQL, para que uma posição de um VARRAY possa ser referenciada (ou seja, para a posição poder ter um valor lido ou atribuído), primeiro é necessário que o seu subscrito seja inicializado.

Vamos agora retornar ao programa da Figura 2. Observe que após a inicialização do vetor, os seus elementos são examinados num loop, para que a quantidade de médias superiores ao valor 7 possa ser contabilizada (linhas 14 a 18)  e então retornada pela função (linha 21). Para testar a função (caso você a tenha criado em seu banco Oracle), basta utilizar o seguinte comando SELECT:

SELECT F_APROVADOS FROM DUAL;

3. Comentários Finais

Este artigo apresentou alguns conceitos elementares sobre  o tipo VARRAY do Oracle. Em artigos futuros serão exploradas mais características deste recurso, tais como a forma de passar um VARRAY como parâmetro em procedimentos e funções PL/SQL, como fazer vetores receberem dados oriundos de tabelas Oracle num programa e também a maneira pela qual um vetor pode ser armazenado numa tabela.
Eduardo Corrêa Gonçalves
Instituto Brasileiro de Geografia e Estatística – IBGE
E-mail: eduardo.correa@ibge.gov.br

0 comentários:

Postar um comentário