<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Embedded_SQL</id>
	<title>Embedded SQL - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Embedded_SQL"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Embedded_SQL&amp;action=history"/>
	<updated>2026-05-15T18:46:37Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Embedded_SQL&amp;diff=33345&amp;oldid=prev</id>
		<title>imported&gt;Graph Pixel: Tippfehler korrigiert.</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Embedded_SQL&amp;diff=33345&amp;oldid=prev"/>
		<updated>2025-06-05T15:40:33Z</updated>

		<summary type="html">&lt;p&gt;Tippfehler korrigiert.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Embedded SQL&amp;#039;&amp;#039;&amp;#039; ({{enS}} für &amp;#039;&amp;#039;eingebettetes [[SQL]]&amp;#039;&amp;#039;, abgekürzt &amp;#039;&amp;#039;&amp;#039;ESQL&amp;#039;&amp;#039;&amp;#039;) standardisiert die Syntax zum Einfügen von SQL Befehlen in Programmiersprachen. Die Einbettung in [[Ada (Programmiersprache)|Ada]], [[C (Programmiersprache)|C]], [[C++]], [[COBOL]], [[Fortran]], [[MUMPS]], [[Pascal (Programmiersprache)|Pascal]] und [[PL/I]] wird im Teil 2 &amp;#039;&amp;#039;Foundation&amp;#039;&amp;#039; (SQL/Foundation) und die Einbettung in [[Java (Programmiersprache)|Java]] im Teil 10 &amp;#039;&amp;#039;Object Language Bindings&amp;#039;&amp;#039; ([[SQLJ|SQL/OLB]]) des [[SQL#Sprachstandard|SQL Standards]] &amp;#039;&amp;#039;ISO/IEC 9075&amp;#039;&amp;#039; spezifiziert.&lt;br /&gt;
&lt;br /&gt;
== Technische Beschreibung ==&lt;br /&gt;
ESQL Statements werden in die Abfolge der regulären Statements der Programmiersprache (= Hostsprache) eingefügt. Ein [[Precompiler]] wandelt die ESQL Statements in normalen Code der Hostsprache um, der dann mit dessen [[Compiler]] übersetzt wird. (Einige COBOL-Compiler enthalten einen integrierten ESQL-Precompiler.) Der umgewandelte Code enthält Aufrufe der [[Schnittstelle]] zur [[Datenbank]]. Diese Schnittstelle muss als [[Programmbibliothek|Bibliothek]] in das fertige Programm [[Linker (Computerprogramm)|gelinkt]] werden. Die Bibliothek ist abhängig von der verwendeten Datenbank und wird gewöhnlich vom jeweiligen Datenbankhersteller geliefert.&lt;br /&gt;
&lt;br /&gt;
Da ESQL standardisiert ist, sollten Programme mit ESQL – solange keine [[proprietär]]en Eigenschaften des jeweiligen SQL-Dialektes verwendet werden – kompatibel mit Datenbanken verschiedener Hersteller sein, allerdings nur auf Ebene des [[Quellcode]]s. Das heißt, dass bei Wechsel des Datenbankfabrikats, manchmal sogar beim Versionsupdate der gleichen Datenbank, der Quellcode durch den ESQL-Precompiler und Compiler neu übersetzt und gegen die aktuelle Bibliothek gelinkt werden muss. Dies unterscheidet ESQL von Konzepten mit ähnlichem Einsatzzweck wie [[ODBC]] oder [[JDBC]], wo beim Wechsel der Datenbank (theoretisch) nur ein [[Gerätetreiber|Treiber]] ausgewechselt wird und das kompilierte Programm weiter verwendet werden kann. Es gibt allerdings mindestens einen COBOL-Compiler, der ESQL-Anweisungen in Aufrufe von ODBC umwandelt.&lt;br /&gt;
&lt;br /&gt;
Der Vorteil dieses Ansatzes der Datenbankanbindung liegt darin, dass zur [[Compilezeit]] nicht nur die SQL-[[Syntax]], sondern auch die Typverträglichkeit der Schnittstellenvariablen gegen die Datentypen des Datenbanksystems geprüft werden kann. Laufzeitgebundene Architekturen wie [[Open Database Connectivity|ODBC]], [[JDBC]], [[ActiveX Data Objects|ADO]] oder [[ADO.NET]] können zu diesem Zeitpunkt keine Typprüfung vornehmen.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
ESQL Statements setzen sich zusammen aus:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
EXEC SQL &amp;lt;sql-statement&amp;gt; &amp;lt;terminator&amp;gt;   für Nicht-Java&lt;br /&gt;
#sql { &amp;lt;sql-statement&amp;gt; };               für Java&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
z.&amp;amp;nbsp;B. COBOL:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
EXEC SQL &amp;lt;sql-statement&amp;gt; END-EXEC.&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
z.&amp;amp;nbsp;B. C, C++, Ada:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
EXEC SQL &amp;lt;sql-statement&amp;gt;;&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Programmierung ==&lt;br /&gt;
Die Kommunikation zwischen SQL und dem Anwendungsprogramm erfolgt per Programmvariablen. Werden diese Programmvariablen in einem SQL-Ausdruck benutzt, so wird ihnen ein Doppelpunkt vorangestellt. &lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
 EXEC SQL&lt;br /&gt;
 SELECT vorname, nachname&lt;br /&gt;
 INTO :vorname, :nachname&lt;br /&gt;
 FROM mitarbeitertabelle&lt;br /&gt;
 WHERE pnr = :pnr&lt;br /&gt;
 ;&lt;br /&gt;
&lt;br /&gt;
Vor der Ausführung des SQL-Befehls muss in der umgebenden Programmiersprache die Variable &amp;#039;pnr&amp;#039; mit einem Wert belegt werden. Nach Ausführung des SQL-Befehls sind die Variablen &amp;#039;vorname&amp;#039; und &amp;#039;nachname&amp;#039; mit Werten belegt – sofern überhaupt ein Satz gefunden wurde.&lt;br /&gt;
&lt;br /&gt;
In einer Datenbank-Tabelle können Spalten mit &amp;lt;code&amp;gt;Null&amp;lt;/code&amp;gt;-Werten definiert werden. Bei den meisten Programmiersprachen können Variablen nicht mit &amp;lt;code&amp;gt;Null&amp;lt;/code&amp;gt;-Werten belegt werden, sondern eine Variable ist immer mit irgendeinem Wert belegt.&lt;br /&gt;
&lt;br /&gt;
Wenn auf Tabellenspalten zugegriffen werden soll, die auch &amp;lt;code&amp;gt;Null&amp;lt;/code&amp;gt;-Werte enthalten, dann müssen Indikatorvariablen verwendet werden. Sie müssen vom Typ &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt; angelegt werden. Diese Variable wird auf einen Wert kleiner 0 gesetzt, falls die Spalte in der Datenbank &amp;lt;code&amp;gt;Null&amp;lt;/code&amp;gt; enthält.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
 EXEC SQL&lt;br /&gt;
 SELECT vorname, nachname&lt;br /&gt;
 INTO :vorname :i_vorname, :nachname :i_nachname&lt;br /&gt;
 FROM mitarbeitertabelle&lt;br /&gt;
 WHERE pnr = :pnr&lt;br /&gt;
 ;&lt;br /&gt;
&lt;br /&gt;
Die Variablen &amp;#039;vorname&amp;#039; und &amp;#039;nachname&amp;#039; werden hier – wie auch im Beispiel oben – zur Aufnahme der gelesenen Werte verwendet. Zusätzlich geben die Indikatorvariablen &amp;#039;i_vorname&amp;#039; und &amp;#039;i_nachname&amp;#039; an, ob der Vorname und der Nachname überhaupt vorhanden war. Wenn z.&amp;amp;nbsp;B. nur der Nachname gespeichert war und der Vorname unbekannt (&amp;lt;code&amp;gt;Null&amp;lt;/code&amp;gt;) war, dann wurde &amp;#039;i_nachname&amp;#039; mit 0 und &amp;#039;i_vorname&amp;#039; mit −1 belegt.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Pro*C]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur| Titel=ISO 9075 Part 1: Framework | Verlag=ISO/IEC | Datum=2003 | Auflage=2. | Kommentar=Referenznummer: 9075-1:2003(E), Abschnitte: 4.8.1, 5.3.3.1 | Online=[https://web.archive.org/web/20160304081026/http://lampsvn.epfl.ch/svn-repos/dubochet/dbc/trunk/doc/9075%282003%29%20ISO%20SQL%20standard/9075%282003%29%201%20framework.pdf web.archive.org] |Format=PDF |KBytes=582 |Abruf=2021-08-24}}&lt;br /&gt;
* {{Literatur| Titel=ISO 9075 Part 2: Foundation | Verlag=ISO/IEC | Datum=2003 | Auflage=2. | Kommentar=Referenznummer: 9075-2:2003(E), Kapitel: 20 Embedded SQL | Online=[https://web.archive.org/web/20160304083044/http://lampsvn.epfl.ch/svn-repos/dubochet/dbc/trunk/doc/9075%282003%29%20ISO%20SQL%20standard/9075%282003%29%202%20foundation.pdf web.archive.org] |Format=PDF |KBytes=139 |Abruf=2021-08-24}}&lt;br /&gt;
* {{Literatur| Titel=ISO 9075 Part 3: Call-Level Interface | Verlag=ISO/IEC | Datum=2003 | Auflage=3. | Kommentar=Referenznummer: 9075-3:2003(E), Anhang B.1 (Übersetzungsbeispiele von Embedded SQL nach low-level Library Function Calls)}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [https://www.postgresql.org/docs/current/static/ecpg.html ECPG – Embedded SQL in C]. PostgreSQL Documentation, (Beschreibung der [[PostgreSQL]] Implementation von Embedded SQL).&lt;br /&gt;
&lt;br /&gt;
{{Navigationsleiste SQL}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Datenbankschnittstelle]]&lt;br /&gt;
[[Kategorie:SQL]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Graph Pixel</name></author>
	</entry>
</feed>