Compartilhar via


Compilar um programa SQL inserido

Como um programa SQL incorporado contém uma mistura de instruções SQL e da linguagem do host, ele não pode ser enviado diretamente a um compilador para a linguagem do host. Em vez disso, ele é compilado por meio de um processo de várias etapas. Embora esse processo seja diferente de produto para produto, as etapas são praticamente as mesmas para todos os produtos.

Esta ilustração mostra as etapas necessárias para compilar um programa SQL incorporado.

Etapas para compilar um programa SQL incorporado

Cinco etapas estão envolvidas na compilação de um programa SQL incorporado:

  1. O programa SQL incorporado é enviado ao pré-compilador SQL, uma ferramenta de programação. O pré-compilador examina o programa, localiza as instruções SQL incorporadas e as processa. É necessário um pré-compilador diferente para cada linguagem de programação compatível com o DBMS. Os produtos de DBMS normalmente oferecem pré-compiladores para uma ou mais linguagens, incluindo C, Pascal, COBOL, Fortran, Ada, PL/I e várias linguagens de montagem.

  2. O pré-compilador produz dois arquivos de saída. O primeiro arquivo é o arquivo de origem, sem as instruções SQL incorporadas. Em seu lugar, o pré-compilador substitui as chamadas para rotinas proprietárias do DBMS que fornecem o vínculo de tempo de execução entre o programa e o DBMS. Normalmente, os nomes e as sequências de chamada dessas rotinas são conhecidos apenas pelo pré-compilador e pelo DBMS; elas não são uma interface pública para o DBMS. O segundo arquivo é uma cópia de todas as instruções SQL incorporadas usadas no programa. Esse arquivo às vezes é chamado de módulo de solicitação de banco de dados, ou DBRM.

  3. A saída do arquivo de origem do pré-compilador é enviada ao compilador padrão da linguagem de programação do host (como um compilador C ou COBOL). O compilador processa o código-fonte e produz o código-objeto como saída. Observe que essa etapa não tem nada a ver com o DBMS ou com o SQL.

  4. O vinculador aceita os módulos de objeto gerados pelo compilador, vincula-os a várias rotinas de biblioteca e produz um programa executável. As rotinas da biblioteca vinculadas ao programa executável incluem as rotinas proprietárias do DBMS descritas na etapa 2.

  5. O módulo de solicitação de banco de dados gerado pelo pré-compilador é enviado a um utilitário de vinculação especial. Esse utilitário examina os comandos SQL, analisa, valida e otimiza-os e, em seguida, produz um plano de acesso para cada comando. O resultado é um plano de acesso combinado para todo o programa, representando uma versão executável das instruções SQL incorporadas. O utilitário de vinculação armazena o plano no banco de dados, geralmente atribuindo a ele o nome do programa aplicativo que o usará. O fato de essa etapa ocorrer em tempo de compilação ou em tempo de execução depende do DBMS.

Observe que as etapas usadas para compilar um programa SQL incorporado se correlacionam muito estreitamente com as etapas descritas anteriormente em Processando uma instrução SQL. Em particular, observe que o pré-compilador separa as instruções SQL do código da linguagem do host, e o utilitário de vinculação analisa e valida as instruções SQL e cria os planos de acesso. Em DBMSs em que a etapa 5 ocorre em tempo de compilação, as primeiras quatro etapas de processamento de uma instrução SQL ocorrem em tempo de compilação, enquanto a última etapa (execução) ocorre em tempo de execução. Isso faz com que a execução de consultas em tais DBMSs seja muito rápida.