Freigeben über


Embedded SQL – Beispiel

Der folgende Code ist ein einfaches eingebettetes SQL-Programm, das in C geschrieben wurde. Das Programm veranschaulicht viele, aber nicht alle der eingebetteten SQL-Techniken. Das Programm fordert den Benutzer zur Eingabe einer Bestellnummer auf, ruft die Kundennummer, den Verkäufer und den Status der Bestellung ab und zeigt die abgerufenen Informationen auf dem Bildschirm an.

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();  
}  

Beachten Sie Folgendes zu diesem Programm:

  • Hostvariablen Die Hostvariablen werden in einem Abschnitt deklariert, der vom BEGIN DECLARE SECTION und END DECLARE SECTION Schlüsselwort (keyword)s eingeschlossen ist. Jedem Hostnamen wird ein Doppelpunkt vorangestellt (:), wenn er in einer eingebetteten SQL-Anweisung angezeigt wird. Der Doppelpunkt ermöglicht es dem Vorkompiler, zwischen Hostvariablen und Datenbankobjekten zu unterscheiden, z. B. Tabellen und Spalten, die denselben Namen haben.

  • Datentypen Die datentypen, die von einem DBMS und einer Hostsprache unterstützt werden, können ganz anders sein. Dies wirkt sich auf Hostvariablen aus, da sie eine doppelte Rolle spielen. Hostvariablen sind einerseits Programmvariablen, die von Hostsprachenanweisungen deklariert und bearbeitet werden. Andererseits werden sie in eingebetteten SQL-Anweisungen zum Abrufen von Datenbankdaten verwendet. Wenn kein Hostsprachentyp vorhanden ist, der einem DBMS-Datentyp entspricht, konvertiert dbMS die Daten automatisch. Da jedoch jedes DBMS über eigene Regeln und Idiosyncrasies verfügt, die dem Konvertierungsprozess zugeordnet sind, müssen die Hostvariablentypen sorgfältig ausgewählt werden.

  • Fehlerbehandlung Der DBMS meldet Laufzeitfehler an das Anwendungsprogramm über einen SQL Communications Area oder SQLCA. Im vorherigen Codebeispiel ist die erste eingebettete SQL-Anweisung INCLUDE SQLCA. Dies weist den Vorkompiler an, die SQLCA-Struktur in das Programm einzuschließen. Dies ist erforderlich, wenn das Programm Fehler verarbeitet, die vom DBMS zurückgegeben werden. Wann immer... Die GOTO-Anweisung weist den Vorkompiler an, Fehlerbehandlungscode zu generieren, der zu einer bestimmten Bezeichnung verzweigt, wenn ein Fehler auftritt.

  • Singleton SELECT Die Anweisung, die zum Zurückgeben der Daten verwendet wird, ist eine Singleton SELECT-Anweisung, d. h. es gibt nur eine einzelne Datenzeile zurück. Daher deklariert oder verwendet das Codebeispiel keine Cursor.