Freigeben über


Kompilieren eines eingebetteten SQL-Programms

Da ein eingebettetes SQL-Programm eine Mischung aus SQL- und Hostsprachenanweisungen enthält, kann es nicht direkt an einen Compiler für die Hostsprache übermittelt werden. Stattdessen wird sie durch einen mehrstufigen Prozess kompiliert. Obwohl sich dieser Prozess von Produkt zu Produkt unterscheidet, sind die Schritte für alle Produkte ungefähr gleich.

Diese Abbildung zeigt die Schritte zum Kompilieren eines eingebetteten SQL-Programms.

Steps to compile an embedded SQL program

Fünf Schritte sind an der Kompilierung eines eingebetteten SQL-Programms beteiligt:

  1. Das eingebettete SQL-Programm wird an den SQL-Vorkompilierer übermittelt, ein Programmiertool. Der Vorkompiler scannt das Programm, findet die eingebetteten SQL-Anweisungen und verarbeitet sie. Für jede programmiersprache, die vom DBMS unterstützt wird, ist ein anderer Vorkompilierer erforderlich. DBMS-Produkte bieten in der Regel Vorkompilierer für eine oder mehrere Sprachen an, darunter C, Pascal, COBOL, Fortran, Ada, PL/I und verschiedene Assemblysprachen.

  2. Der Vorkompiler erzeugt zwei Ausgabedateien. Die erste Datei ist die Quelldatei, die von den eingebetteten SQL-Anweisungen entfernt wird. An ihrem Ort ersetzt der Vorkompilierer Aufrufe proprietärer DBMS-Routinen, die die Laufzeitverbindung zwischen dem Programm und dem DBMS bereitstellen. In der Regel sind die Namen und die Aufrufsequenzen dieser Routinen nur für den Vorkompiler und das DBMS bekannt; sie sind keine öffentliche Schnittstelle zum DBMS. Die zweite Datei ist eine Kopie aller eingebetteten SQL-Anweisungen, die im Programm verwendet werden. Diese Datei wird manchmal als Datenbankanforderungsmodul oder DBRM bezeichnet.

  3. Die Quelldateiausgabe des Vorkompilers wird an den Standardcompiler für die Hostprogrammiersprache (z. B. einen C- oder COBOL-Compiler) übermittelt. Der Compiler verarbeitet den Quellcode und erzeugt Objektcode als Ausgabe. Beachten Sie, dass dieser Schritt nichts mit dem DBMS oder mit SQL zu tun hat.

  4. Der Linker akzeptiert die vom Compiler generierten Objektmodule, verknüpft sie mit verschiedenen Bibliotheksroutinen und erzeugt ein ausführbares Programm. Die mit dem ausführbaren Programm verknüpften Bibliotheksroutinen enthalten die proprietären DBMS-Routinen, die in Schritt 2 beschrieben werden.

  5. Das vom Vorkompiler generierte Datenbankanforderungsmodul wird an ein spezielles Bindungshilfsprogramm übermittelt. Dieses Hilfsprogramm untersucht die SQL-Anweisungen, analysiert, überprüft und optimiert sie und erstellt dann einen Zugriffsplan für jede Anweisung. Das Ergebnis ist ein kombinierter Zugriffsplan für das gesamte Programm, der eine ausführbare Version der eingebetteten SQL-Anweisungen darstellt. Das Bindungshilfsprogramm speichert den Plan in der Datenbank und weist ihn in der Regel dem Namen des Anwendungsprogramms zu, das ihn verwendet. Ob dieser Schritt zur Kompilierungszeit oder Laufzeit stattfindet, hängt vom DBMS ab.

Beachten Sie, dass die schritte, die zum Kompilieren eines eingebetteten SQL-Programms verwendet werden, sehr eng mit den Schritten in Verbindung stehen, die weiter oben in der Verarbeitung einer SQL-Anweisung beschrieben wurden. Beachten Sie insbesondere, dass der Vorkompiler die SQL-Anweisungen vom Hostsprachencode trennt, und das Bindungshilfsprogramm analysiert und überprüft die SQL-Anweisungen und erstellt die Zugriffspläne. In DBMSs, bei denen Schritt 5 zur Kompilierungszeit stattfindet, werden die ersten vier Schritte der Verarbeitung einer SQL-Anweisung zur Kompilierungszeit ausgeführt, während der letzte Schritt (Ausführung) zur Laufzeit stattfindet. Dadurch wird die Abfrageausführung in solchen DBMSs sehr schnell ausgeführt.