29.8. Utilização das áreas descritoras de SQL

A área descritora de SQL é um método mais sofisticado para processar os resultados das declarações SELECT e FETCH. A área descritora de SQL agrupa os dados de uma linha de dados junto com os itens de metadado, em uma estrutura de dados. Os metadados são particularmente úteis ao executar declarações SQL dinâmicas, quando a natureza das colunas do resultado não podem ser conhecidas a priori.

Uma área descritora de SQL consiste em um cabeçalho, que contém informações a respeito de todo o descritor, e uma ou mais áreas descritoras de item, onde cada área basicamente descreve uma coluna da linha de resultado.

É necessário alocar a área descritora de SQL para que possa ser utilizada:

EXEC SQL ALLOCATE DESCRIPTOR identificador;

O identificador serve como o "nome de variável" da área descritora. Quando não há mais necessidade do descritor, este deve ser liberado:

EXEC SQL DEALLOCATE DESCRIPTOR identificador;

Para usar a área descritora deve-se especificá-la como destino do armazenamento na cláusula INTO, em vez de especificar as variáveis hospedeiras:

EXEC SQL FETCH NEXT FROM meu_cursor INTO DESCRIPTOR meu_descritor;

Como fazer para extrair os dados da área descritora? Pode-se pensar na área descritora como sendo uma estrutura com campos nomeados. Para extrair o valor de um campo do cabeçalho e armazená-lo em uma variável hospedeira deve ser utilizada a seguinte declaração:

EXEC SQL GET DESCRIPTOR nome :variável_hospedeira = campo;

Atualmente existe apenas um campo de cabeçalho definido, chamado COUNT, que informa quantas áreas descritoras de item existem (ou seja, quantas colunas o resultado contém). A variável hospedeira precisa ser do tipo inteiro. Para extrair um campo da área descritora de item deve ser utilizada a seguinte declaração:

EXEC SQL GET DESCRIPTOR nome VALUE num :variável_hospedeira = campo;

onde num pode ser um literal inteiro, ou uma variável hospedeira contendo um inteiro. Os campos possíveis são:

CARDINALITY (integer)

número de linhas no conjunto de resultados

DATA

item de dado verdadeiro (portanto, o tipo de dado deste campo depende da consulta)

DATETIME_INTERVAL_CODE (integer)

?

DATETIME_INTERVAL_PRECISION (integer)

não implementado

INDICATOR (integer)

o indicador (indica um valor nulo ou o truncamento do valor)

KEY_MEMBER (integer)

não implementado

LENGTH (integer)

comprimento do dado em caracteres

NAME (string)

nome da coluna

NULLABLE (integer)

não implementado

OCTET_LENGTH (integer)

comprimento da representação do caractere do dado em bytes

PRECISION (integer)

precisão (para o tipo numeric)

RETURNED_LENGTH (integer)

comprimento do dado em caracteres

RETURNED_OCTET_LENGTH (integer)

comprimento da representação do caractere do dado em bytes

SCALE (integer)

escala (para o tipo numeric)

TYPE (integer)

código numérico do tipo de dado da coluna

SourceForge.net Logo CSS válido!