Como usar o sql embutido
O método mais comum de mistura SQL com linguagens procedurais é chamado embutido
Conteúdo
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 esse motivo, programas que contêm o SQL incorporado são geralmente passados 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 dados da Comissão - e atualiza a tabela de funcionários com ele:
EXEC SQL BEGIN DECLARE SECÇÃO-VARCHAR uid [20] -VARCHAR PWD [20] -VARCHAR ename [10] salário -FLOAT, salary_ind comm-CURTO, comm_ind-EXEC SQL END DECLARE SECÇÃO-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 SEMPRE SQL SQLERROR STOP-EXEC SEMPRE QUE NÃO ENCONTRADO STOP-EXEC SQL CONNECT: uid-printf ("Conectado ao utilizador: n percentagens", Uid.arr) -printf ("Inserir o nome do empregado para atualizar: ") -scanf ("porcentagens", 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 ("Digite 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 ( “Enter nova comissão:“) -sret = scanf ("percentf",&comm) -comm_ind = 0- / * Indicador conjunto * / 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 ("percentuais de empregados atualizado. 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 pretende fazê-lo). Aqui está um resumo da ordem em que as instruções são executadas:
SQL declara variáveis de host.
código C controla o processo de início de sessão do utilizador.
SQL define-se o tratamento de erros e se conecta ao banco de dados.
Video: Integrando java ao banco de dados (SQL Server 2012 Express) Parte 1
código C solicita um nome de funcionário do usuário e coloca-lo em uma variável.
um SQL SELECIONAR declaração recupera os dados para salário e comissão do funcionário nomeado, ea instrução armazena os dados nas variáveis de host :salário e : comm.
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.
SQL atualiza o banco de dados com os novos valores.
C em seguida, apresenta um concluir a operação mensagem.
Video: UFRGS - Videoaula: SQL Embutida em Linguagem Hospedeira
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 da linguagem hospedeira, colocando as instruções SQL em uma rotina externo separado. Cada instrução SQL é substituído por uma linguagem hospedeira LIGAR da rotina externa correspondente. O compilador de linguagem pode agora fazer o seu trabalho.
A forma como a parte SQL é passada para o banco de dados depende da implementaçã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 são incluídas em um segmento declaração que precede o segmento de programa. O segmento 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 precedido por um 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 é “END-EXEC”, e em 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 nomes de 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) -