Ejemplo de SQL incrustado
El código siguiente es un programa SQL incrustado simple, escrito en C. El programa ilustra muchas técnicas de SQL insertadas, pero no todas ellas. El programa solicita al usuario un número de pedido, recupera el número de cliente, el vendedor y el estado del pedido y muestra la información recuperada en la pantalla.
int main() {
EXEC SQL INCLUDE SQLCA;
EXEC SQL BEGIN DECLARE SECTION;
int OrderID; /* Employee ID (from user) */
int CustID; /* Retrieved customer ID */
char SalesPerson[10] /* Retrieved salesperson name */
char Status[6] /* Retrieved order status */
EXEC SQL END DECLARE SECTION;
/* Set up error processing */
EXEC SQL WHENEVER SQLERROR GOTO query_error;
EXEC SQL WHENEVER NOT FOUND GOTO bad_number;
/* Prompt the user for order number */
printf ("Enter order number: ");
scanf_s("%d", &OrderID);
/* Execute the SQL query */
EXEC SQL SELECT CustID, SalesPerson, Status
FROM Orders
WHERE OrderID = :OrderID
INTO :CustID, :SalesPerson, :Status;
/* Display the results */
printf ("Customer number: %d\n", CustID);
printf ("Salesperson: %s\n", SalesPerson);
printf ("Status: %s\n", Status);
exit();
query_error:
printf ("SQL error: %ld\n", sqlca->sqlcode);
exit();
bad_number:
printf ("Invalid order number.\n");
exit();
}
Tenga en cuenta lo siguiente sobre este programa:
Variables de host Las variables de host se declaran en una sección incluida en las palabras clave BEGIN DECLARE SECTION y END DECLARE SECTION. Cada nombre de variable de host tiene como prefijo dos puntos (:) cuando aparece en una instrucción SQL incrustada. Los dos puntos permiten al precompilador distinguir entre variables de host y objetos de base de datos, como tablas y columnas, que tienen el mismo nombre.
Tipos de datos Los tipos de datos admitidos por un DBMS y un lenguaje host pueden ser bastante diferentes. Esto afecta a las variables de host porque desempeñan un rol dual. Por un lado, las variables de host son variables de programa, declaradas y manipuladas por instrucciones de lenguaje host. Por otro lado, se usan en instrucciones SQL insertadas para recuperar datos de base de datos. Si no hay ningún tipo de lenguaje host que corresponda a un tipo de datos DBMS, DBMS convierte automáticamente los datos. Sin embargo, dado que cada DBMS tiene sus propias reglas e idiosincrasias asociadas al proceso de conversión, se deben elegir cuidadosamente los tipos de variables de host.
El control de errores de DBMS notifica errores en tiempo de ejecución al programa de aplicaciones a través de un área de comunicaciones de SQL o SQLCA. En el ejemplo de código anterior, la primera instrucción SQL insertada es INCLUDE SQLCA. Esto indica al precompilador que incluya la estructura SQLCA en el programa. Esto es necesario siempre que el programa procese errores devueltos por el DBMS. La instrucción WHENEVER...GOTO indica al precompilador que genere código de control de errores que se ramifica a una etiqueta específica cuando se produce un error.
SELECT singleton La instrucción que se usa para devolver los datos es una instrucción SELECT singleton; es decir, devuelve solo una sola fila de datos. Por lo tanto, el ejemplo de código no declara ni usa cursores.