SQL încorporat
Embedded SQL ( engleză pentru embedded SQL , prescurtat ESQL ) standardizează sintaxa pentru inserarea comenzilor SQL în limbaje de programare. Incorporarea în Ada , C , C ++ , COBOL , Fortran , MUMPS , Pascal și PL / I se află în partea 2 Foundation (SQL / Foundation) și încorporarea în Java în partea 10 Object Language Bindings ( SQL / OLB ) din Standardul SQL ISO / IEC 9075 specificat.
descriere tehnica
Instrucțiunile ESQL sunt inserate în secvența instrucțiunilor regulate ale limbajului de programare (= limbajul gazdă). Un precompilator convertește instrucțiunile ESQL în cod normal de limbă gazdă, care este apoi tradus cu compilatorul său . (Unele compilatoare COBOL conțin un precompilator ESQL integrat.) Codul convertit conține apeluri către interfața către baza de date . Această interfață trebuie conectată ca bibliotecă în programul finalizat . Biblioteca depinde de baza de date utilizată și este de obicei furnizată de producătorul bazei de date respective.
Deoarece ESQL este standardizat, programele cu ESQL - atâta timp cât nu se utilizează proprietăți proprii ale dialectului SQL respectiv - ar trebui să fie compatibile cu bazele de date de la diferiți producători, dar numai la nivelul codului sursă . Aceasta înseamnă că, atunci când marca bazei de date se schimbă, uneori chiar și atunci când versiunea aceleiași baze de date este actualizată, codul sursă trebuie recompilat de precompilatorul și compilatorul ESQL și legat de biblioteca curentă. Aceasta distinge ESQL de concepte cu un scop similar, cum ar fi ODBC sau JDBC , unde la schimbarea bazei de date (în teorie) se schimbă un singur driver și programul compilat poate continua să fie utilizat. Cu toate acestea, există cel puțin un compilator COBOL care convertește instrucțiunile ESQL în apeluri către ODBC.
Avantajul acestei abordări a conexiunii la baza de date este că la momentul compilării nu se poate verifica doar sintaxa SQL , ci și compatibilitatea tipului variabilelor de interfață cu tipurile de date ale sistemului de baze de date. Arhitecturile legate de runtime precum ODBC , JDBC , ADO sau ADO.NET nu pot efectua o verificare de tip.
sintaxă
Instrucțiunile ESQL sunt alcătuite din:
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>;
programare
Comunicarea dintre SQL și programul aplicației are loc prin intermediul variabilelor programului. Dacă aceste variabile de program sunt utilizate într-o expresie SQL, acestea sunt precedate de două puncte.
Exemplu:
EXEC SQL SELECT vorname, nachname INTO :vorname, :nachname FROM mitarbeitertabelle WHERE pnr = :pnr ;
Înainte de a executa comanda SQL, variabilei „pnr” trebuie să i se atribuie o valoare în limbajul de programare din jur. După executarea comenzii SQL, variabilelor „prenume” și „prenume” li se atribuie valori - dacă s-a găsit o înregistrare.
Coloanele cu Nullvalori pot fi definite într-un tabel de baze de date . În majoritatea limbajelor de programare, variabilelor nu li se pot atribui Nullvalori, dar unei variabile i se atribuie întotdeauna o anumită valoare.
Dacă Nulltrebuie accesate coloanele de tabel care conțin și valori , trebuie utilizate variabilele indicator. Acestea trebuie create de acest tip int. Această variabilă este setată la o valoare mai mică de 0 dacă coloana se află în baza de date Null.
Exemplu:
EXEC SQL SELECT vorname, nachname INTO :vorname :i_vorname, :nachname :i_nachname FROM mitarbeitertabelle WHERE pnr = :pnr ;
Variabilele „prenume” și „prenume” sunt utilizate aici - ca în exemplul de mai sus - pentru a înregistra valorile citite. În plus, variabilele indicator „i_first name” și „i_lastname” indică dacă numele și prenumele erau chiar disponibile. Dacă z. De exemplu, dacă numai numele de familie a fost salvat și prenumele era necunoscut ( Null), atunci „i_lastname” i s-a atribuit 0 și „i_first name” i s-a atribuit −1.
Vezi si
literatură
- ISO 9075 Partea 1: Cadru . Ediția a II-a. ISO / IEC, 2003 ( web.archive.org [PDF; 582 kB ; accesat la 24 august 2021] număr de referință: 9075-1: 2003 (E), secțiuni: 4.8.1, 5.3.3.1).
- ISO 9075 Partea 2: Fundație . Ediția a II-a. ISO / IEC, 2003 ( web.archive.org [PDF; 139 kB ; Adus la 24 august 2021] Referință: 9075-2: 2003 (E), capitol: 20 Embedded SQL).
- ISO 9075 Partea 3: Interfață la nivel de apel . 3. Ediție. ISO / IEC, 2003 (număr de referință: 9075-3: 2003 (E), Anexa B.1 (exemple de traducere de la SQL încorporat la apeluri de funcții de bibliotecă de nivel scăzut)).
Link-uri web
- ECPG - SQL încorporat în C . Documentație PostgreSQL, (Descrierea implementării PostgreSQL a Embedded SQL).