So verwenden Embedded SQL

Die gebräuchlichste Methode von SQL mit prozeduralen Sprachen Mischen aufgerufen eingebettet

SQL. Sie fragen sich, wie SQL Werke eingebettet? Nehmen Sie einen Blick auf den Namen und Sie haben die Grundlagen nach unten: Drop SQL-Anweisungen in der Mitte eines prozeduralen Programm, wo auch immer Sie sie benötigen.

wie Sie vielleicht erwarten natürlich, eine SQL-Anweisung, die in der Mitte eines C-Programms plötzlich erscheint, kann eine Herausforderung für einen Compiler präsentieren, die nicht erwartet wird. Aus diesem Grund werden die Programme mit eingebettetem SQL in der Regel durch eine bestandene Preprocessor vor kompiliert oder interpretiert werden. Das EXEC SQL Richtlinie warnt den Präprozessor der bevorstehenden Auftritt von SQL-Code.

Als ein Beispiel für Embedded SQL Blick auf ein Programm geschrieben in Oracle Pro * C-Version der C-Sprache. Das Programm, das ein Unternehmen greift MITARBEITER Tabelle, fordert den Benutzer für einen Mitarbeiter Namen und zeigt dann, dass Mitarbeiter das Gehalt und Provision. Es fordert den Benutzer dann für neue Gehalts- und Provisionsdaten - und aktualisiert die Mitarbeitertabelle mit ihm:

EXEC SQL BEGIN SECTION-VARCHAR uid ERKLÄREN [20] -VARCHAR PWD [20] -VARCHAR ename [10] float Gehalt, comm-SHORT salary_ind, comm_ind-EXEC SQL END DECLARE SECTION-main () {int sret- / * scanf Return-Code * // * Anmelden * / strcpy (uid.arr "FRED") - / * kopieren Sie den Benutzernamen * / uid.len = strlen (uid.arr) -strcpy (pwd.arr, "Turm") - / * kopieren das Passwort * / pwd.len = strlen (pwd.arr) -exec SQL WHEN SQLERROR STOPP-EXEC SQL WHEN not Stop-EXEC SQL CONNECT: uid-printf ( "Connected to user: Prozente n", uid.arr) -printf ( "Geben Sie den Mitarbeiternamen zu aktualisieren:") -scanf ( "Prozente", ename.arr) -ename.len = strlen (ename.arr) -exec SQL SELECT GEHALT, KOMM IN: Gehalt ,: commFROM EMPLOYWHERE ENAME =: ename-printf ( "Employee: Lohnprozenten: percent6.2f comm: percent6.2f n", ename.arr, Gehalt, comm) -printf ( "Geben Sie den neuen Gehalt:") -sret = scanf ( "percentf", Gehalt) -salary_ind = 0-if (SRET == EOF !! SRET == 0) / * gesetzt Anzeige * / salary_ind = -1- / * Stellen Indikator für NULL * / printf (# 147-Enter new Kommission: # 147 -) - SRET = scanf ( "percentf", comm) -comm_ind = 0- / * gesetzt Anzeige * / if (SRET == EOF !! SRET == 0) comm_ind = -1- / * Stellen Indikator für NULL * / EXEC SQL UPDATE EMPLOYSET GEHALT =: Gehalt: salary_indSET COMM =: comm: comm_indWHERE ENAME =: ename-printf ( ". Mitarbeiter Prozente aktualisiert n", ename.arr) -exec SQL COMMIT WORK-exit (0) -}

Sie müssen kein Experte in C sein, die Essenz von dem zu verstehen, was dieses Programm tut (und wie sie beabsichtigt, es zu tun). Hier ist ein Überblick über die Reihenfolge, in der die Anweisungen ausführen:

  1. SQL erklärt Hostvariablen.

  2. C-Code steuert den Benutzer-Login-Prozedur.

  3. SQL einrichtet Fehlerbehandlung und eine Verbindung zur Datenbank.

  4. C-Code erbittet einen Mitarbeiternamen von dem Benutzer und legt sie in einer Variablen.

  5. Eine SQL WÄHLEN Anweisung ruft die Daten für den Namen des Mitarbeiters Gehalt und Provision, und die Anweisung speichert die Daten in den Host-Variablen :Gehalt und : comm.

  6. C nimmt dann wieder und zeigt den Namen des Mitarbeiters, Gehalt, Provisionen und erbittet dann neue Werte für Gehalt und Provision. Es überprüft auch, ob ein Eintrag gemacht worden ist, und wenn man nicht hat, setzt sie ein Kennzeichen.

  7. SQL aktualisiert die Datenbank mit den neuen Werten.

  8. C zeigt dann ein Vorgang abgeschlossen Nachricht.

  9. SQL verpflichtet, die Transaktion und C verlässt schließlich das Programm.

Sie können so, weil der Präprozessor die Befehle von zwei Sprachen mischen. Der Präprozessor trennt die SQL-Anweisungen von den Host-Sprache Befehle, die SQL-Anweisungen in einer separaten externen Routine setzt. Jede SQL-Anweisung ist mit einem Host-Sprache ersetzt ANRUF der entsprechenden externen Routine. Der Compiler kann nun seine Arbeit zu tun.

Die Art, wie der SQL Teil an die Datenbank übergeben wird, hängt von der Implementierung. Sie als Anwendungsentwickler, müssen nicht über irgendwelche Gedanken zu machen. Der Präprozessor kümmert davon. Sie sollte besorgt über ein paar Dinge, aber die in der interaktiven SQL nicht angezeigt werden - Dinge wie Host-Variablen und inkompatiblen Datentypen.

Host-Variablen

Einige Informationen müssen zwischen dem Host-Sprachprogramm und die SQL-Segmente übergeben werden. Sie geben diese Daten mit Host-Variablen. Um für SQL, um die Host-Variablen zu erkennen, müssen Sie sie deklarieren, bevor Sie sie verwenden. Erklärungen sind in einer Erklärung Segment enthalten, die das Programmsegment vorausgeht. Die Erklärung Segment wird durch die folgende Richtlinie angekündigt:

EXEC SQL BEGIN DECLARE SECTION -

Das Ende des Deklarations Segment wird durch diese Leitung signalisiert:

EXEC SQL END DECLARE SECTION -

Jede SQL-Anweisung muss durch ein vorangehen EXEC SQL-Richtlinie. Das Ende einer SQL-Segment kann oder kann nicht durch eine Terminator-Richtlinie signalisiert werden. In COBOL, ist der Terminator-Richtlinie # 147-END-EXEC # 148-, und in C, dann ist es ein Semikolon.

Konvertieren Datentypen

In Abhängigkeit von der Kompatibilität der Datentypen, die von der Host-Sprache unterstützt und die von SQL unterstützt wird, können Sie verwenden BESETZUNG bestimmte Typen zu konvertieren. Sie können Host-Variablen verwenden, die in der erklärt wurden Vereinbarungsteil. Denken Sie daran, Host-Variablennamen mit einem Doppelpunkt voran (:), Wenn Sie sie in SQL-Anweisungen, wie im folgenden Beispiel zu verwenden:

INSERT INTO FOODS (FOODNAME, Kalorien, Eiweiß, Fett, Kohlenhydrate) VALUES (: foodname,: Kalorien,: Eiweiß,: Fett,: carbo) -

Menü