Array / Record simples em pl/sql no oracle

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 temporária.

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;
  /* Limpando tabelas de memória */
  lista.DELETE;
END;
/

execute TesteRafa;
%name Array / Record simples em pl/sql no oracle

Autor: Rafael Stoever

Bacharel em Sistema de Informação pela Uniasselvi, atualmente cursando Gerenciamento de Projetos em TI pela Pós Graduação Uniasselvi. Atuo como Analista de suporte a banco de dados – DBA pela Lumina Serviços em TI residente de Blumenau/ SC, OPN Certified Specialist, Certificado OCP 10g/11g/12c, OCE RAC10g e Linux 10g. Conhecimentos em Microsoft SqlSever, Mysql e programação web (php,asp).