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) |