Array / Record num pl/sql no oracle

3

Posted on : 23-06-2006 | By : .rafa | In : Banco de Dados, Geral, Oracle, Sistemas Operacionais

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.

Deveshed
oreillynet
sqlmagazine