Partilhar via


Compilando um programa SQL incorporado

Como um programa SQL embutido contém uma mistura de SQL e instruções da linguagem anfitriã, não pode ser submetido diretamente a um compilador para a linguagem anfitriã. Em vez disso, é compilado através de um processo em vários passos. Embora este processo varie de produto para produto, os passos são aproximadamente os mesmos para todos os produtos.

Esta ilustração mostra os passos necessários para compilar um programa SQL embutido.

Passos para compilar um programa SQL embutido

Cinco passos estão envolvidos na compilação de um programa SQL embutido:

  1. O programa SQL embutido é submetido ao pré-compilador SQL, uma ferramenta de programação. O pré-compilador analisa o programa, encontra as instruções SQL embutidas e processa-as. É necessário um pré-compilador diferente para cada linguagem de programação suportada pelo SGBD. Os produtos DBMS normalmente oferecem pré-compiladores para uma ou mais linguagens, incluindo C, Pascal, COBOL, Fortran, Ada, PL/I e várias linguagens de assembly.

  2. O pré-compilador produz dois ficheiros de saída. O primeiro ficheiro é o ficheiro de origem, despojado das suas instruções SQL incorporadas. No seu lugar, o pré-compilador substitui chamadas para rotinas proprietárias do SGBD que estabelecem a ligação em tempo de execução entre o programa e o SGBD. Tipicamente, os nomes e as sequências de chamadas destas rotinas são conhecidos apenas pelo pré-compilador e pelo SGBD; não são uma interface pública para o SGBD. O segundo ficheiro é uma cópia de todas as instruções SQL embutidas usadas no programa. Este ficheiro é por vezes chamado de módulo de pedido de base de dados, ou DBRM.

  3. A saída do ficheiro fonte do pré-compilador é submetida ao compilador padrão da linguagem de programação hospedeira (como um compilador C ou COBOL). O compilador processa o código-fonte e produz código objeto como sua saída. Note que este passo não tem nada a ver com o SGBD ou com SQL.

  4. O linker aceita os módulos objeto gerados pelo compilador, liga-os a várias rotinas de biblioteca e produz um programa executável. As rotinas de biblioteca ligadas ao programa executável incluem as rotinas proprietárias do SGBD descritas no passo 2.

  5. O módulo de pedido de base de dados gerado pelo pré-compilador é submetido a uma utilidade especial de ligação. Esta utilidade examina as instruções SQL, analisa, valida e otimiza, e depois produz um plano de acesso para cada instrução. O resultado é um plano de acesso combinado para todo o programa, representando uma versão executável das instruções SQL embutidas. A ferramenta de ligação armazena o plano na base de dados, normalmente atribuindo-lhe o nome do programa de aplicação que o irá utilizar. Se esta etapa ocorre em tempo de compilação ou de execução depende do SGBD.

Note que os passos usados para compilar um programa SQL embutido correlacionam-se muito de perto com os passos descritos anteriormente em Processing a SQL Statement. Em particular, repare que o pré-compilador separa as instruções SQL do código da linguagem anfitriã, e a utilidade de binding analisa e valida as instruções SQL e cria os planos de acesso. Nos SGBDs onde o passo 5 ocorre em tempo de compilação, os primeiros quatro passos do processamento de uma instrução SQL ocorrem em tempo de compilação, enquanto o último passo (execução) ocorre em tempo de execução. Isto tem o efeito de tornar a execução de consultas nestes SGBDs muito rápida.