Como usar o SQL embutido

O método mais comum de misturar SQL com linguagens procedurais é chamado incorporado

SQL. Quer saber como incorporado obras SQL? Tome um olhar para o nome e você tem o básico para baixo: Drop instruções SQL para o meio de um programa processual, sempre que você precisar deles.

Claro que, como você pode esperar, uma instrução SQL que aparece de repente no meio de um programa C pode apresentar um desafio para um compilador que não está esperando por ele. Por essa razão, os programas contêm o SQL incorporado são geralmente passada através de um pré-processador antes de ser compilado ou interpretado. o SQL EXEC directiva adverte o pré-processador do aparecimento iminente de código SQL.

Como um exemplo de SQL embutido, olhar para um programa escrito em versão Pro * C da linguagem C da Oracle. O programa, que acessa uma empresa de EMPREGADO mesa, solicita ao usuário um nome de funcionário e, em seguida, exibe salário e comissão do empregado. Em seguida, ele solicita ao usuário novo salário e os dados da Comissão - e atualiza a tabela de funcionários com ele:

EXEC SQL BEGIN DECLARE SECTION-VARCHAR uid [20] -VARCHAR pwd [20] -VARCHAR ename [10] salário -FLOAT, salary_ind comm-SHORT, comm_ind-EXEC SQL END DECLARE SECTION-main () {int sret- / * scanf código de retorno * // * Entrar * / strcpy (uid.arr, "FRED") - / * copiar o nome de usuário * / uid.len = strlen (uid.arr) -strcpy (pwd.arr, "Torre") - / * copiar a senha * / pwd.len = strlen (pwd.arr) SQL -exec WHENEVER SQLERROR SQL STOP-EXEC SEMPRE qUE NÃO ENCONTRADO STOP-EXEC SQL CONNECT: uid-printf ( "Conectado para o usuário: por cento n", uid.arr) -printf ( "Inserir o nome do empregado para atualizar:") -scanf ( "percentagens", ename.arr) -ename.len = strlen (ename.arr) -exec SQL SELECT sALÁRIO, cOM eM: salário ,: commFROM EMPLOYWHERE ENAME =: ename-printf ( "Funcionário: porcentagens salário: percent6.2f comm: percent6.2f n", ename.arr, salário, comm) -printf ( "Enter novo salário:") -sret = scanf ( "percentf", salário) -salary_ind = 0-se (sret == EOF !! sret == 0) / * conjunto de indicadores * / salary_ind = -1 / * definir indicador para NULL * / printf (# 147-Enter new comissão: # 147 -) - sret = scanf ( "percentf", comm) -comm_ind = 0- / * conjunto de indicadores * / if (sret == EOF !! sret == 0) comm_ind = -1 / * Definir indicador para NULL * / EXEC SQL ATUALIZAÇÃO EMPLOYSET sALÁRIO =: salário: salary_indSET COMM =: comm: comm_indWHERE ENAME =: ename-printf ( ". porcentagens Funcionário atualizada n", ename.arr) -exec SQL COMMIT WORK-exit (0) -}

Você não tem que ser um especialista em C para entender a essência do que este programa está fazendo (e como ele tem a intenção de fazê-lo). Aqui está um resumo da ordem em que as instruções são executadas:

  1. SQL declara variáveis ​​de host.

  2. código C controla o processo de login do usuário.

  3. SQL configura a manipulação de erros e se conecta ao banco de dados.

  4. código C solicita um nome de funcionário do usuário e coloca-lo em uma variável.

  5. um SQL SELECIONAR declaração recupera os dados para o salário e a comissão do funcionário chamado ea instrução armazena os dados nas variáveis ​​de host :salário e : comm.

  6. C, em seguida, assume novamente e exibe o funcionário nome, salário ea comissão e, em seguida, solicita novos valores para o salário e comissão. Ele também verifica para ver se uma entrada foi feita, e se não tem, ele define um indicador.

  7. SQL atualiza o banco de dados com os novos valores.

  8. C, em seguida, exibe uma concluir a operação mensagem.

  9. SQL confirma a transação, e C, finalmente, sai do programa.

Você pode misturar os comandos de duas línguas como este por causa do pré-processador. O pré-processador separa as instruções SQL dos comandos de linguagem de acolhimento, colocando as instruções SQL em uma rotina externo separado. Cada instrução SQL é substituído por uma linguagem de acolhimento LIGAR da rotina externa correspondente. O compilador de linguagem podem agora fazer o seu trabalho.

A maneira como a parte é passada SQL à base de dados depende da aplicação. Você, como o desenvolvedor do aplicativo, não precisa se preocupar com nada disso. O pré-processador cuida dele. Você devemos estar preocupado com algumas coisas, no entanto, que não aparecem no SQL interativo - coisas como variáveis ​​de host e tipos de dados incompatíveis.

variáveis ​​de host

Algumas informações devem ser passadas entre o programa de língua de acolhimento e os segmentos SQL. Você passar esses dados com hospedar variáveis. Para que o SQL para reconhecer as variáveis ​​de host, você deve declarar-los antes de usá-los. As declarações estão incluídos em um segmento declaração que precede o segmento de programa. O segmento de declaração é anunciado pela seguinte directiva:

EXEC SQL BEGIN DECLARE SECTION -

A extremidade do segmento de declaração é sinalizado por esta linha:

EXEC SQL END DECLARE SECTION -

Cada instrução SQL deve ser precedida de uma EXEC directiva SQL. A extremidade de um segmento de SQL pode ou não pode ser assinalado por uma directiva terminador. Em COBOL, a directiva terminator é # 147-END EXEC # 148-, e C, é um ponto e vírgula.

Converter tipos de dados

Dependendo da compatibilidade dos tipos de dados suportados pela linguagem de acolhimento e as apoiadas pelo SQL, você pode ter que usar FUNDIDA para converter certos tipos. Você pode usar variáveis ​​de host que foram declaradas no DECLARE SECÇÃO. Lembre-se de prefixo dos nomes das variáveis ​​do host com dois pontos (:) Quando você usá-los em instruções SQL, como no exemplo a seguir:

INSERT INTO FOODS (FOODNAME, calorias, proteínas, gorduras, hidratos de carbono) VALUES (: foodname,: calorias,: proteínas,: gordo,: carbo) -

menu