sexta-feira, 25 de outubro de 2013

Tipos de Variáveis – Parte 2


Nesse post vou continuar o falando sobre os tipos de variáveis do PL/SQL.
O incio da postagem Tipos de Variáveis esta no link: Parte 1

 

Variável LOB  (Large Objects)


As variáveis do tipo Large objects como o proprio nome sugere possibilitam o armazenamento de grandes informações como imagens, sons, vídeos, arquivos de texto e pdf. Esse tipo de variavel é dividido em 4 subtipos (datatypes): BFILE, BLOB, CLOB e NCLOB

BFILE

Serve apenas para leitura pois armazena tipos de dados binários localizados fora do banco de dados em arquivos do sistema operacional como TXT e HTML. Essa variável  deve ser declarada com referencia nula.

Exemplo de declaração da variavel BFILE:


V_TESTE BFILE;


    BLOB

    A varialvel do tipo BLOB aceita o armazenamento de dados binários de tamanho variável, esse datatype possibilita a leitura e a escrita. É possível especificar o tamanho 8 e 32 terabites. Se o tamanho não for definido será igual a 1 byte.
    A escrita e leitura da variável BLOB só pode ser feita dentro de uma transação (bloco anônimo ou nomeada),  utilizando  o pacote DBMS_LOB.

    A declaração da variável BLOB pode ser feita de 3 formas:
    • V_TESTE BLOB; -- variável BLOB nula
    • V_TESTE BLOB := empty_blob(); -- variável BLOB vazia
    • V_TESTE BLOB := '43'||'41'||'52'; --variável BLOB hexadecimal igual a" CAR"
    Esse tipo de variável é utilizada principalmente para o armazenamento de imagens grandes ou de filmes.


    CLOB

    Aceita o armazenamento de dados alfanuméricos,  podendo alocar entre 8 e 32 terabites de memoria.
    A variável CLOB aceita escrita e leitura porem isso só pode ser feito dentro de uma transação (bloco anônimo ou nomeada), para realizar a leitura de uma coluna do tipo CLOB é preciso utilizar o pacote DBMS_LOB. 

    A declaração da variável CLOB pode ser feita de 3 formas:


    • V_TESTE CLOB; -- variável CLOB nula
    • V_TESTE CLOB := empty_clob(); -- variável CLOB vazia
    • V_TESTE CLOB := 'CAR'; --variável CLOB igual a" CAR"



    NCLOB


    São tipos de dados alfanuméricos, podendo armazenar caracteres unicodes alocando entre  8 e 2 terabites de memoria.

    A variável NCLOB aceita escrita e leitura porem isso só pode ser feito dentro de uma transação (bloco anônimo ou nomeada), para realizar a leitura de uma coluna do tipo NCLOB é preciso utilizar o pacote DBMS_LOB é recomendável que a leitura ou o armazenamento das variáveis do tipo NCLOB seja realizada em partes caso o contrario pode-se sobrecarregar o sistema. 

    A declaração da variável NCLOB pode ser feita de 3 formas:

    • V_TESTE NCLOB; -- variável CLOB nula
    • V_TESTE NCLOB := empty_clob(); -- variável CLOB vazia
    • V_TESTE NCLOB := 'CAR'; --variável CLOB igual a" CAR"
    Esse tipo de variável é muito utilizado para o armazenamento de grandes textos.

    Variável Composta


    Uma variável do tipo composta contém uma ou mais variáveis, são formadas por uma ou mais posições (campos ou entradas). Podemos entender este tipo de variável como uma “estrutura” de armazenamento ou matriz. Podem ser registros, tabelas e VARRAYS. Existem dois grupos de datatypes Record and Colectoins (Gravações e Coleções)

    RECORD

    É um conjunto de elementos semelhantes que podem ser variáveis escalares ( Tipos de Variáveis – Parte 1), é uma estrutura que contem uma lista de variáveis. A definição do tipo de dados de uma variável RECORD pode ser implícita ou explicita.
    A declaração do tipo RECORD por der feita da seguinte forma:
    Declarar um tipo RECORD para agrupar dados

    TYPE nome_tipo IS RECORD (campo[, campo]...);

    Pode-se herdar a definição de um registo utilizando o comando %TYPE, desta forma ao referenciar o campo de uma tabela sua variável será do mesmo tipo que o campo.

    A definição de variáveis utilizando %TYPE simplifica a manutenção e reduz os impactos de 
    uma atualização, pois caso o campo da tabela seja alterado essa  alteração será transparente a todas as variáveis que estão declaradas em procedimentos internos ou externos com este atributo.


    DECLARE
          registo_teste    T_TABELA.C_COLUNA%TYPE;
    BEGIN
       SELECT C_COLUNA INTO registo_teste 
                FROM T_TABELA WHERE rownum < 2;

    END;

    COLLECTIONS


    Collections podem ser listas ou arrys, a diferença entre elas é que uma array possui um indexador numerado em sequência.
    As variáveis COLLECTIONS podem ser divididas em 3 subtipos (datatypes): VARRAY, Tabela aninhada  e Array Associativa


    VARRAY


    A collection do tipo VARRAY deve ser usada quando souber o tamanho máximo que a coleção vai ter antes da declaração, pois essa variável não pode aumentar de tamanho apos ser declarada. A VARRAY é um tipo de objeto e requer construção explicita, pode ficar em 3 estados: definida, inicializada e alocada.
    A criação do type VARRAY pode ser feita de duas formas em SQL utilizando o comando DDL, CREATE, ou em Bloco de execução na parte do DECLARE apenas declarando o type deve ser feita da seguinte forma:
    • Comando SQL

                   CREATE or REPLACE TYPE ty_varry_teste as VARRAY(10) of NUMBER; 
    • Declaração PL/SQL (bloco de execução)

                 TYPE ty_varry_teste is VARRAY(10) of NUMBER; 


    Os exemplos acima criam o type ty_varray_teste do tipo escalar NUMBER com 10 posições é possível utilizar qualquer tipo de variável escalar na criação do type. A diferença entre criar um type com comando SQL e com comando PL/SQL é que o segundo o type vai existir apenas em tempo de execução enquanto na primeira o type será criado fisicamente no seu banco de forma que qualquer bloco ou procedimento poderá utilizar o type.

    A variável do tipo type ty_varray_teste pode ser declarada de 3 formas como mencionei acima:
    • V_TESTE ty_varray_teste; -- variável definida
    • V_TESTE ty_varray_teste := ty_varray_teste(); --inicializada porem vazia
    • V_TESTE ty_varray_teste :=ty_varray_teste(1,2,3,4,5,null,7,8,9,10); --variável alocada
    é possível alocar o espaço de uma variável do tipo VARRAY com NULL, a não ser que na criação do type seja definido como "NOT NULL" como na criação abaixo:

    CREATE or REPLACE TYPE ty_varry_teste as VARRAY(10) of NUMBER NOT NULL; 

    Tabela aninhada

    Uma Tabela aninhada deve ser usada quando não souber o tamanho máximo que a coleção vai ter antes de declarar a variável, pois ela pode crescer apos a declaração.
    Assim como a VARRAY a tabela aninhada o type pode ser declarado de duas formas em SQL utilizando o comando DDL, CREATE, ou em Bloco de execução na parte do DECLARE apenas declarando o type deve ser feita da seguinte forma:
    • Comando SQL

                   CREATE or REPLACE TYPE ty_tabela_teste as TABLE of NUMBER; 
    • Declaração PL/SQL (bloco de execução)

                 TYPE ty_tabela_teste is TABLE of NUMBER; 

    Os exemplos acima criam o type ty_tabela_teste do tipo escalar NUMBER sem limite de posições é possível utilizar qualquer tipo de variável escalar na criação do type. A diferença entre criar um type com comando SQL e com comando PL/SQL é que o segundo o type vai existir apenas em tempo de execução enquanto na primeira o type será criado fisicamente no seu banco de forma que qualquer bloco ou procedimento poderá utilizar o type. Uma variável do tipo type ty_tabela_teste  pode ser declarada de 3 formas:
    • V_TESTE ty_tabela_teste; -- variável definida
    • V_TESTE ty_tabela_teste := ty_tabela_teste(); --inicializada porem vazia
    • V_TESTE ty_tabela_teste := ty_tabela_teste(1,2,3,4,5,null,7,8,9,10); --variável alocada
    Array Associativa

    É um conjunto de pares de chave e valor, com index povoado esparsamente .Só pode ser declarado no PL/SQL sua declaração pode ser feita da seguinte forma:
    • TYPE tabela_teste is TABLE of NUMBER INDEX BY PLS_INTEGER;
    A declaração de uma variável do tipo tabela_teste deve ser feita da seguinte forma:
    • V_TESTE tabela_teste;
    é importante destacar que a declaração do TYPE não limita o tamanho maximo da variável uma vez que ela pode crescer apos sua declaração, e o INDEX não é sequencial e pode ser definido como VARCHAR. 

    Uma vantagem de utilizar a Array Associativa é que ao deletar uma elemento da array o espaço de memoria que estava alocado é liberado.

    Variável Referência (apontador)

    Variáveis de referencia são mais conhecidas como cursores, são utilizadas para ajuste de resultados de querys em tempo de processamento, podem ser usados apenas pela linguagem PL/SQL em blocos nomeados ou não. Desta forma sua declaração e seus valores são perdidos no termino da execução.
    Eles podem ser implementados forte ou fracamente tipados.

    • TYPE cursos_teste is REF CURSOR RETURN PRLP.tprlcadmat0%ROWTYPE; --Cursor fortemente tipado
    • TYPE cursos_teste is REF CURSOR; --cursos fracamente tipado


    Esses são os tipos de variáveis aceitos pelo PL/SQL, mais pra frente vou falar sobre como trabalhar com com os datatype e como fazer a conversão entre eles.

    Referencia: http://www.linhadecodigo.com.br/artigo/539/large-objects-para-oracle.aspx#ixzz2iTa5Zrlr

    Nenhum comentário:

    Postar um comentário

    Deixe aqui sua opinião, duvida ou sugestão!