Apêndice A

 

A forma de linguagem de programação de banco de dados mais largamente utilizada é a SQL embutida em uma linguagem de programação de propósito geral, referenciando uma linguagem hospedeira. Na SQL embutida, todos os processamentos de consulta são executados pelo sistema de banco de dados. O resultado desta consulta é então tornado disponível ao programa, uma tupla por vez.

 

Um programa SQL embutido precisa ser processado por um pré-processador especial antes da compilação. As requisições SQL embutidas são substituídas por declarações e chamadas de procedimentos da linguagem hospedeira, os quais permitem a execução em conjunto com acessos do banco de dados. Então, o programa resultante é compilado pelo compilador da linguagem hospedeira. Afim de identificar requisições SQL  embutidas para o pré-processador, é usado o comando EXEC SQL, que tem a forma:

 

exec sql < comandos sql> end exec

 

O comando SQL include é colocado no programa para identificar o lugar onde o pré processador deve inserir as variáveis especiais usadas para comunicação entre o programa e o sistema de banco de dados. As variáveis da linguagem hospedeira podem ser usadas dentro de comandos SQL embutidos, mas eles precisam ser precedidos de ( : )  para distinguí-las das variáveis SQL.

 

Para escrever uma consulta relacional é usado o comando declare cursor. O resultado da consulta não é ainda computado. Em vez disso, o programa precisa usar os comandos open e fetch para obter as tuplas resultado.

 

Exemplo: Assuma que tem uma variável quantia  da linguagem hospedeira e que desejamos encontrar o nome e a cidade de clientes com mais de quantia em alguma conta. Isto pode ser escrito assim:

 

exec sql

declare c cursor for

select Nome, cliente-cidade

from clientes, depositos

where clientes.Cod_Cliente=depositos.Cod_Cliente

and saldo>:quantia

end-exec

 

A variável c nesta expressão é chamada de cursor para a consulta. Esta variável é usada para identificar a consulta no comando open, que causa a avaliação da consulta, e o comando fetch, que coloca os valores de uma tupla em variáveis da linguagem hospedeira.

 

Uma vez declarado, devemos abrir o cursor.

 

Exec sql Open c end-exec

 

Isto leva o sistema de banco de dados a executar a consulta e a salvar os resultados em uma relação temporária.

 

 

Uma série de comandos fetch é executada para tornar as tuplas do resultado disponíveis para o programa. O comando fetch requer uma variável da linguagem hospedeira para cada atributo da relação resultante.

 

Ex:

exec sql fetch c into :cn, :cc end-exec

 

O programa pode então manipular as variáveis cn e cc usando os recursos da linguagem hospedeira.

 

Uma única requisição fetch retorna apenas uma tupla. Para obter todas as tuplas do resultado, o programa precisa conter um loop para iteragir sobre todas as tupla. Uma variável SQLCODE é ajustada para indicar que não há mais nenhuma tupla a ser processada.

 

O comando close precisa ser usado para dizer ao sistema de banco de dados que feche o cursor especificado.

 

Exec sql close c end-exec

 

Uma vez fechado, deve ser liberada a área de memória alocada para o cursor.

 

Exec sql deallocate c end-exec

 

As expressões SQL embutidas para modificações do banco de dados (update, insert e delete) não retornam um resultado. Assim, elas são mais fáceis de expressar. Uma requisição de modificação do banco de dados toma a forma:

 

Exec sql <qualquer update, delete ou insert> end-exec

 

 

 

 

 

 

Bibliografia

 

Date, C. J. Bancos de dados:  introdução aos sistemas de bancos de dados. 8.ed. Rio de Janeiro: Campus, 1998.

 

SILBERSCHATZ, Abraham. Sistema de banco de dados. 3. ed. São Paulo: Makron Books, 1999. (LIVRO TEXTO)
Free Web Hosting