Ingesloten SQL

Embedded SQL ( Engels voor embedded SQL , kortweg ESQL ) standaardiseert de syntaxis voor het invoegen van SQL-commando's in programmeertalen. De inbedding in Ada , C , C++ , COBOL , Fortran , MUMPS , Pascal en PL/I zit in Part 2 Foundation (SQL/Foundation) en de inbedding in Java in Part 10 Object Language Bindings ( SQL/OLB ) van de SQL-standaard ISO / IEC 9075 gespecificeerd.

technische beschrijving

ESQL-statements worden ingevoegd in de reeks reguliere statements van de programmeertaal (= hosttaal). Een precompiler converteert de ESQL-statements naar normale hosttaalcode, die vervolgens wordt vertaald met zijn compiler . (Sommige COBOL-compilers bevatten een geïntegreerde ESQL-precompiler.) De geconverteerde code bevat aanroepen naar de interface naar de database . Deze interface moet als bibliotheek in het voltooide programma worden gekoppeld . De bibliotheek is afhankelijk van de gebruikte database en wordt meestal geleverd door de betreffende databasefabrikant.

Aangezien ESQL gestandaardiseerd is, zouden programma's met ESQL - zolang er geen propriëtaire eigenschappen van het respectievelijke SQL-dialect worden gebruikt - compatibel moeten zijn met databases van verschillende fabrikanten, maar alleen op het niveau van de broncode . Dit betekent dat wanneer het merk van de database verandert, soms zelfs wanneer de versie van dezelfde database wordt bijgewerkt, de broncode opnieuw moet worden gecompileerd door de ESQL-precompiler en compiler en moet worden gekoppeld aan de huidige bibliotheek. Dit onderscheidt ESQL van concepten met een soortgelijk doel zoals ODBC of JDBC , waarbij bij het wijzigen van de database (in theorie) slechts één driver wordt gewijzigd en het gecompileerde programma verder kan worden gebruikt. Er is echter ten minste één COBOL-compiler die ESQL-instructies omzet in aanroepen naar ODBC.

Het voordeel van deze benadering van de databaseverbinding is dat tijdens het compileren niet alleen de SQL- syntaxis , maar ook de typecompatibiliteit van de interfacevariabelen met de gegevenstypen van het databasesysteem kan worden gecontroleerd. Runtime-gebonden architecturen zoals ODBC , JDBC , ADO of ADO.NET kunnen geen typecontrole uitvoeren.

syntaxis

ESQL-statements bestaan ​​uit:

EXEC SQL <sql-statement> <terminator>   für Nicht-Java
#sql { <sql-statement> };               für Java
 

z. B. COBOL:

EXEC SQL <sql-statement> END-EXEC.
 

z. B.C, C++, Ada:

EXEC SQL <sql-statement>;
 

programmeren

De communicatie tussen SQL en het applicatieprogramma vindt plaats via programmavariabelen. Als deze programmavariabelen in een SQL-expressie worden gebruikt, worden ze voorafgegaan door een dubbele punt.

Voorbeeld:

EXEC SQL
SELECT vorname, nachname
INTO :vorname, :nachname
FROM mitarbeitertabelle
WHERE pnr = :pnr
;

Voordat het SQL-commando wordt uitgevoerd, moet de variabele 'pnr' een waarde krijgen in de omringende programmeertaal. Na het uitvoeren van het SQL-commando krijgen de variabelen 'voornaam' en 'achternaam' waarden toegewezen - als er al een record is gevonden.

Kolommen met Nullwaarden kunnen worden gedefinieerd in een databasetabel . In de meeste programmeertalen kunnen aan variabelen geen Nullwaarden worden toegewezen , maar aan een variabele wordt altijd een bepaalde waarde toegekend.

Als tabelkolommen Nullmoeten worden benaderd die ook waarden bevatten , moeten indicatorvariabelen worden gebruikt. Ze moeten gemaakt zijn van het type int. Deze variabele is ingesteld op een waarde kleiner dan 0 als de kolom in de database staat Null.

Voorbeeld:

EXEC SQL
SELECT vorname, nachname
INTO :vorname :i_vorname, :nachname :i_nachname
FROM mitarbeitertabelle
WHERE pnr = :pnr
;

De variabelen 'voornaam' en 'achternaam' worden hier - zoals in het voorbeeld hierboven - gebruikt om de gelezen waarden vast te leggen. Daarnaast geven de indicatorvariabelen 'i_first name' en 'i_lastname' aan of de voor- en achternaam überhaupt beschikbaar waren. Als z. Als bijvoorbeeld alleen de achternaam was opgeslagen en de voornaam onbekend was ( Null), dan kreeg 'i_lastname' 0 en 'i_first name' −1.

Zie ook

literatuur

  • ISO 9075 Deel 1: Kader . 2e editie. ISO / IEC, 2003 ( web.archive.org [PDF; 582 kB ; geraadpleegd op 24 augustus 2021] referentienummer: 9075-1: 2003 (E), secties: 4.8.1, 5.3.3.1).
  • ISO 9075 Deel 2: Fundering . 2e editie. ISO / IEC, 2003 ( web.archive.org [PDF; 139 kB ; Ontvangen 24 augustus 2021] Referentie: 9075-2: 2003 (E), Hoofdstuk: 20 Embedded SQL).
  • ISO 9075 Deel 3: Interface op oproepniveau . 3. Uitgave. ISO / IEC, 2003 (referentienummer: 9075-3: 2003 (E), bijlage B.1 (vertaalvoorbeelden van embedded SQL naar low-level bibliotheekfunctieaanroepen)).

web links