Composite Data Types – Parte II

PL/SQL Record Type

Um PL/SQL Record Type é o segundo tipo de dados composto que veremos aqui no blog. Ele nada mais é que uma linha de dados com dois ou mais campos de dados. Veja um exemplo bem simples abaixo.

Nas linhas 2 à 5 criamos um registro do tipo PL/SQL, na linha 7 criamos uma variável desse mesmo tipo e nas linhas 10 e 11 atribuímos valores e na linha 13 exibimos na tela os mesmos. Bem mais simples que o SQL UDT do post passado não é? Uma estrutura de registro dessa como vimos na imagem é útil apenas quando utilizado com blocos PL/SQL, já que não podemos criar como um objeto do schema, mas os objetos que vimos anteriormente se demonstra mais portável e útil.

SQL Collection

Um SQL Collection pode ser de tipos de dados escalares, também chamados de Attributte Data Types(ADT), ou elementos SQL UDT. SQL Collection pode ser um tabela, ou lista ou então um array. Tabelas, ou listas, não possuem limites de elementos enquanto o array sim e é definido na hora da criação. Para adicionar novos membros, ou elementos, precisamos fazer um processo de dois passos: primeiro estender o tamanho e depois adicionar. No caso de um array temos um limite fixo e se já chegou nesse limite será lançado um erro ao tentar estender mais um espaço. Uma observação é que essas coleções são do tipo final, ou seja, não podemos estender esse tipo.

ADT Collections

ADT Collection é composta por tipos de dados base SQL, ou seja, escalares, tipo NUMBER, INTERGER, VARCHAR2 e etc. Veja um exemplo criando dois tipos, um do tipo tabela e outro VARRAY.

Na segunda linha do código a coleção ADT do tipo VARCHAR2 e na linha 5 também, a unica diferença é que a primeira coleção é do tipo TABELA, sem limite de elementos, e a segunda do tipo VARRAY, com limite de elementos fixo. Dentro do bloco PL/SQL anônimo criamos um laço utilizando o FOR para ter acesso a todos os membros da coleção, veremos mais sobre isto adiante. A única coisa que precisamos saber é que esse laço imprime o valor das duas coleções.

Vejam que na imagem criamos a coleção do tipo VARRAY com no máximo 3 elementos, mas só inicializamos 2 na declaração. Vejam na imagem abaixo como estender o tamanho e adicionar um novo membro, percebam também que ao tentar estender mais uma vez um erro é lançado.

UDT Collections

Já vimos no post anterior como criar um tipo de dados UDT. Agora veremos como criar coleções de UDT. No post anterior já criamos o UDT agora podemos então criar uma coleção utilizando esse UDT. Vejam no exemplo.

PL/SQL Collection

Vamos utilizar agora um bloco PL/SQL para criar um ADT Collections.

No exemplo acima poderíamos ter utilizado ao invés de um TABLE OF INTEGER um VARRAY(n) OF INTEGER e utilizar da mesma maneira como já vimos mais acima neste mesmo post. Mas temos ainda mais uma opção que é usar um associative array, ou INDEX BY TABLE, que possui algumas vantagens e desvantagens. A vantagem é que não precisam de construtor e nem precisamos pedir mais espaço(EXTEND) antes de incluir mais membros. Mas não podemos inicializar os seus valores junto com a variável, temos que adicionar cada membro um por um. Existem dois tipos, um com índice numérico e outro por string. Vejam os dois tipos na imagem abaixo.

Um Associative ARRAY nunca terá mais que duas variáveis, uma é o próprio index e a outra e o valor indexado. Mas existe uma outra opção, que seria indexar uma variável composta, como um RECORD. Sendo assim a nossa variável indexada teria mais de uma valor. Esse exemplo é demonstrado abaixo.

DECLARE
  TYPE registro IS RECORD (
    nome VARCHAR2(30),
    idade INTEGER
  );
  TYPE a_array IS TABLE OF registro INDEX BY PLS_INTEGER;
  reg REGISTRO;
  v_ar A_ARRAY;
BEGIN
  reg.nome := 'Tercio';
  reg.idade := 31;
  v_ar(1) := reg;
  
  reg.nome := 'Teste';
  reg.idade := 18;
  v_ar(2) := reg;
  
  FOR i IN 1..2 LOOP
    dbms_output.put_line('Registro '||i);
    dbms_output.put_line('Nome: '||v_ar(i).nome||', idade: '||v_ar(i).idade);
  END LOOP;
END;
/

O resultado do bloco acima é exibido abaixo.

Procedimento PL/SQL concluído com sucesso.

Registro 1
Nome: Tercio, idade: 31
Registro 2
Nome: Teste, idade: 18

E agora para finalizar o post veremos exemplos de UDT Collections em blocos PL/SQL. Vamos demonstrar os exemplos anteriores mas agora como Coleção PL/SQL, primeiro uma coleção UDT.

E agora para finalizar o nosso ultimo tipo e exemplo, vamos ver PL/SQL Record Type dentro do bloco PL/SQL com uso de associative arrays.

Percebam que a única diferença de uma solução SQL e PL/SQL é apenas o modo de declaração. Enquanto um se torna objeto do esquema, que no caso é a solução SQL(com o comando CREATE), o outro se torna um tipo de dados local no bloco PL/SQL.

Anúncios

Meu nome é Tércio Costa, sou formado em Ciências da Computação pela UFPB, tenho a certificação Oracle SQL Expert e OCP PL/SQL, mantendo um blog reconhecido pela OTN(oraclepress.wordpress.com), no qual também publico artigos técnicos no portal OTN, no portal http://www.profissionaloracle.com.br/gpo e na revista SQL Magazine. Além de tudo isto sou um Oracle ACE Associate por estar sempre contribuindo para a comunidade com um bom nível de expertise.

Marcado com: , , , , , ,
Publicado em PL/SQL

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.

Esse Blog é reconhecido pela
Certificações
Sou articulista

Clique para seguir este blog e receber notificações via email de novos posts.

Tércio Costa

Tércio Costa

Meu nome é Tércio Costa, sou formado em Ciências da Computação pela UFPB, tenho a certificação Oracle SQL Expert e OCP PL/SQL, mantendo um blog reconhecido pela OTN(oraclepress.wordpress.com), no qual também publico artigos técnicos no portal OTN, no portal http://www.profissionaloracle.com.br/gpo e na revista SQL Magazine. Além de tudo isto sou um Oracle ACE Associate por estar sempre contribuindo para a comunidade com um bom nível de expertise.

Links Pessoais

Serviços verificados

Visualizar Perfil Completo →

Total de Visualizações da Página
  • 138.077 Visualizações
%d blogueiros gostam disto: