Para quem trabalha com PL/SQL as vezes precisa usar tabelas temporarias para pegar algumas informaçoes e depois ficar fazendo select´s em cima de tabelas temporarias, e o pior... esquecem muitas vezes de limpar estas tabelas do banco.
Uma boa dica seria usar um ARRAY, assim podemos criar um record.
Aqui vou mostrar a criação de um array do tipo table sem pegar os dados de uma tabela e alimenta-la desde o zero e depois consultar os seus dados.
Estou usando a tabelateste onde tem o codigo e descricao e estou inserindo as descricoes de um unico codigo no meu array. Bom uma simples aplicação mas muito util para transportar dados de um select sem usar cursor ou tabela temporaria.
SET serverout ON; CREATE OR REPLACE procedure TesteRafa AS type my_lista_rec IS record( campo1 varchar2(100), campo2 number); type a_lista IS TABLE of my_lista_rec INDEX BY binary_integer; lista a_lista; CURSOR cCor IS SELECT DESCRICAO FROM TABELATESTE WHERE CODIGO = '011'; rCor cCor%rowtype; contador number; BEGIN contador := 0; open cCor; loop fetch cCor INTO rCor; exit when cCor%notfound; begin lista(contador).campo1 := rCor.descricao; lista(contador).campo2 := contador; contador := contador + 1; end; end loop; close cCor; contador := 0; FOR i IN lista.first .. lista.last loop dbms_output.put_line(lista(i).campo1); end loop; -- retificando /* Limpando tabelas de memória */ lista.DELETE; END; /
execute TesteRafa;
e aqui vai aparecer os dados do record, claro para fazer este teste é bom vc polular a tabela de teste para ele colocar alguma coisa no record do pl/sql e dps imprimir algo.









Em seu exemplo de “Array / Record num PL/SQL no Oracle”, fiquei em dúvida sobre quem estará fechando o “lista”?
No caso do cursor existe um comando “CLOSE” fechando “cCor”, mas quem fecha o “lista”?
Se eu não fechar o que ocorre?
Tenho uma situação onde uma package fica na seção do usuário por muito tempo. E esta contém uma varray global (definida no cabeçalho da package) que só some quando refaço a conexão.
Como faço para fechar este varray?
interessante, estive vendo isso ai e uma coisa que estou adotando eh limpar o record q fiz.
colocando o seguinte comando lista.delete;
estarei retificando o meu post e vou dar uma olhada no que vc disse… se tiveres um exemplo eu agradeceria..
Nota 10.. muito bom mesmo, simples eficiente e pratico.
many thanks for this excellent share! , Enjoyed Going Though
It !!