Cómo utilizar SQL incorporado

Se llama al método más común de la mezcla de SQL con lenguas de procedimiento incrustado

SQL. ¿Se pregunta cómo incrustado obras SQL? Tome una mirada en el nombre y usted tiene los fundamentos abajo: Caída de sentencias SQL en el medio de un programa de procedimiento, donde los necesite.

Por supuesto, como se puede esperar, una sentencia SQL que aparece de repente en medio de un programa en C puede presentar un desafío para un compilador que no se lo esperaba. Por esa razón, los programas que contienen SQL incorporado por lo general se pasan a través de una preprocesador antes de ser compilado o interpretado. los EXEC SQL Directiva advierte el preprocesador de la inminente aparición de código SQL.

Como ejemplo de SQL incorporado, mirar un programa escrito en la versión Pro de Oracle * C del lenguaje C. El programa, que tiene acceso a una empresa de EMPLEADO mesa, solicita al usuario un nombre de empleado y luego muestra el salario y la comisión de ese empleado. A continuación, solicita al usuario nuevo salario y datos de comisión - y actualiza la tabla de empleados con ella:

EXEC SQL BEGIN DECLARE SECTION-VARCHAR uid [20] -VARCHAR pwd [20] -VARCHAR ename [10] salario -FLOAT, salary_ind-comm CORTO, comm_ind-EXEC SQL END DECLARE SECTION-main () {int sret- / * scanf código de retorno * // * Entrar * / strcpy (uid.arr, "Fred") - / * copiar el nombre de usuario * / uid.len = strlen (uid.arr) -strcpy (pwd.arr, "TORRE") - / * copia la contraseña * / pwd.len = strlen (pwd.arr) -exec SQL CUANDO SQLERROR SQL-STOP EXEC SIEMPRE QUE NO ENCUENTRA STOP-EXEC SQL CONNECT: uid-printf ("Conectado al usuario: porcentajes n", uid.arr) -printf ("Introduzca el nombre del empleado para actualizar:") -scanf ("porcentajes", ename.arr) -ename.len = strlen (ename.arr) -exec SQL SELECT SALARIO, COMISION EN: Salario ,: commFROM EMPLOYWHERE ENAME =: ename-printf ("Empleado: porcentajes de salario: percent6.2f comm: percent6.2f n", ename.arr, salario, comm) -printf ("Enter nuevo salario:") -sret = scanf ( "percentf", salario) -salary_ind = 0-si (SRET == EOF !! SRET == 0) / * establecer indicadores * / salary_ind = -1- / * Establecer indicador NULL * / printf (" Introduzca nueva Comisión: ") - SRET = scanf ("percentf", comm) -comm_ind = 0- / * Indicador establecido * / if (SRET == EOF !! SRET == 0) comm_ind = -1- / * indicador SET NULL * / EXEC SQL ACTUALIZACIÓN EMPLOYSET SALARIO =: Salario: salary_indSET COMM =: comm: comm_indWHERE ENAME =: ename-printf (". porcentajes Empleado actualizados n", ename.arr) -exec SQL COMMIT WORK-exit (0) -}

Usted no tiene que ser un experto en C para comprender la esencia de lo que este programa está haciendo (y cómo pretende hacerlo). He aquí un resumen de la orden en el que las sentencias se ejecutan:

  1. SQL declara variables del lenguaje principal.

  2. Código C controla el procedimiento de inicio de sesión de usuario.

  3. SQL establece el control de errores y se conecta a la base de datos.

  4. Código C solicita un nombre de empleado del usuario y lo coloca en una variable.

  5. Un SQL SELECT declaración recupera los datos de salario y la comisión del empleado llamado, y la declaración almacena los datos en las variables del lenguaje principal :salario y : comm.

  6. C luego toma otra vez y muestra el nombre del empleado, el salario y comisión y luego solicita nuevos valores de sueldo y comisión. También comprueba si una entrada se ha hecho, y si uno no tiene, se establece un indicador.

  7. SQL actualiza la base de datos con los nuevos valores.

  8. C a continuación, muestra una Operación completa mensaje.

  9. SQL confirma la transacción, y C, finalmente, sale del programa.

Usted puede mezclar las órdenes de dos idiomas así por el preprocesador. El preprocesador separa las sentencias SQL de los comandos de lenguaje principal, la colocación de las sentencias SQL en una rutina externa independiente. Cada sentencia SQL se sustituye con una lengua de acogida LLAMADA de la rutina externa correspondiente. El compilador de lenguaje ahora puede hacer su trabajo.

La forma en la parte SQL se pasa a la base de datos depende de la implementación. Usted, como el desarrollador de la aplicación, no tiene que preocuparse de nada de esto. El preprocesador se encarga de ello. usted debería estar preocupado por algunas cosas, sin embargo, que no aparecen en SQL interactivo - cosas como variables del lenguaje principal y tipos de datos incompatibles.

Variables del lenguaje principal

Parte de la información se debe pasar entre el programa de idioma de acogida y los segmentos de SQL. Se pasa estos datos con variables del lenguaje principal. Para que SQL reconocer las variables del lenguaje principal, debe declararlos antes de usarlos. Las declaraciones se incluyen en un segmento de la declaración que precede al segmento de programa. El segmento de declaración se anunció por la siguiente directiva:

EXEC SQL BEGIN DECLARE SECTION -

El final del segmento declaración es señalada por esta línea:

EXEC SQL END DECLARE SECTION -

Cada sentencia SQL debe ir precedida de un EXEC Directiva SQL. El final de un segmento de SQL puede o no puede ser señalado por una directiva terminador. En COBOL, la directiva terminador es "-FIN EXEC ", y en C, que es un punto y coma.

Convertir tipos de datos

Dependiendo de la compatibilidad de los tipos de datos soportados por el idioma de acogida y las subvencionadas por SQL, puede que tenga que utilizar ELENCO para convertir ciertos tipos. Puede utilizar variables del lenguaje principal que han sido declaradas en la DECLARE SECTION. Recuerde que debe prefijar los nombres de variables host con dos puntos (:) Cuando se utilizan en sentencias SQL, como en el siguiente ejemplo:

INSERT INTO ALIMENTOS (FOODNAME, calorías, proteínas, grasas, carbohidratos) VALUES (: foodname,: calorías,: proteínas, gordo,: carbo) -



» » » » Cómo utilizar SQL incorporado