Esempio di SQL incorporato
Il codice che segue è un semplice programma SQL incorporato, scritto in C. Il programma illustra molte, ma non tutte, le tecniche di SQL incorporato. Il programma richiede all'utente un numero d'ordine, recupera il numero del cliente, il venditore e lo stato dell'ordine e visualizza le informazioni recuperate sullo schermo.
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();
}
Tenere presente quanto segue su questo programma:
Variabili host Le variabili host sono dichiarate in una sezione racchiusa dalle parole chiave BEGIN DECLARE SECTION e END DECLARE SECTION. Ogni nome di variabile host è preceduto dai due punti (:) quando appare in un'istruzione SQL incorporata. I due punti permettono al precompilatore di distinguere tra variabili host e oggetti del database, come tabelle e colonne, che hanno lo stesso nome.
Tipi di dati I tipi di dati supportati da un sistema DBMS e una lingua host possono essere molto diversi. Questo influisce sulle variabili dell'ospite perché svolgono un duplice ruolo. Da un lato, le variabili host sono variabili del programma, dichiarate e manipolate dalle istruzioni del linguaggio host. D'altra parte, sono utilizzati nelle istruzioni SQL incorporate per recuperare i dati del database. Se non esiste un tipo di linguaggio host che corrisponda a un tipo di dati del DBMS, quest'ultimo converte automaticamente i dati. Tuttavia, poiché ogni DBMS ha le proprie regole e idiosincrasie associate al processo di conversione, i tipi di variabili host devono essere scelti con attenzione.
Gestione degli errori Il sistema DBMS segnala errori di runtime al programma di applicazioni tramite un'area di comunicazione SQL o SQLCA. Nell'esempio di codice precedente la prima istruzione SQL incorporata è INCLUDE SQLCA. Questo indica al precompilatore di includere la struttura SQLCA nel programma. Questa operazione è necessaria ogni volta che il programma elabora gli errori restituiti dal sistema DBMS. L'istruzione WHENEVER...GOTO indica al precompilatore di generare del codice di gestione degli errori che si dirama verso un'etichetta specifica quando si verifica un errore.
Singleton SELECT L'istruzione utilizzata per restituire i dati è una singleton SELECT, cioè restituisce solo una singola riga di dati. Pertanto, l'esempio di codice non dichiara né utilizza i cursori.