Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes,...
Transcript of Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes,...
![Page 1: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/1.jpg)
Embedded SQL in PostgreSQL
Dr. Michael Meskes, [email protected]
7. Dezember 2010
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 2: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/2.jpg)
Michael Meskes
Seit 1993 Freie Software
Seit 1994 Linux
Seit 1995 Debian GNU/Linux
Seit 1998 PostgreSQL
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 3: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/3.jpg)
Michael Meskes
1992 - 1996 Promotion
1996 - 1998 Projektleiter
1998 - 2000 Niederlassungsleiter
seit 2000 Geschaftsfuhrer
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 4: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/4.jpg)
Embedded SQL
Embedded SQL ist eine Spracherweiterung von SQL, mit der esmoglich ist, SQL-Anweisungen innerhalb einer strukturierten oder
objektorientierten Programmiersprache [. . . ] auszufuhren.Quelle: Wikipedia
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 5: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/5.jpg)
Konzepte von Embedded SQL
SQL-Standard
Normales C-Programm mit eingebettetem SQL
Prakompiler wandelt SQL-Code in Library-Aufrufe um
Pruft Syntax des SQL-Code beim Kompilieren
Erleichtert Datenaustausch zwischen C und SQL
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 6: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/6.jpg)
Prakompiler - ECPG
Kontrolle der SQL-Syntax
Identisch mit SQL-Syntax des Backends
Umwandlung von SQL nach C
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 7: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/7.jpg)
Libraries
libecpg - SQL Umsetzung
libpgtypes - SQL Datentypen
libecpg compat - Kompatibilitat
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 8: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/8.jpg)
Programme ubersetzen
ecpg prog1.pgc
# (erzeugt prog1.c)
cc -c -I/usr/include/postgresql prog1.c
# (erzeugt prog1.o)
cc -o prog prog1.o ... -lecpg
# (erzeugt prog)
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 9: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/9.jpg)
Beispiel der C-Syntax
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
...
puts("Hallo");
...
EXEC SQL UPDATE tabelle SET a = a + 1;
...
}
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 10: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/10.jpg)
Ubersetzt
/* Processed by ecpg (4.6.0) */
/* These include files are added by the preprocessor */
#include <ecpglib.h>
#include <ecpgerrno.h>
#include <sqlca.h>
/* End of automatic include section */
#line 1 "a.pgc"
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
...
puts("Hallo");
...
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal,
"update tabelle set a = a + 1", ECPGt_EOIT, ECPGt_EORT);}
#line 9 "a.pgc"
...
}
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 11: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/11.jpg)
Verbinden
EXEC SQL CONNECT TO dbname AS connname USER user;
Zum Beispiel:
EXEC SQL CONNECT
TO tcp:postgresql://sql.beispiel.de:5432/mydb
AS myconn USER peter IDENTIFIED BY ’geheim’;
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 12: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/12.jpg)
Verbindung beenden
EXEC SQL DISCONNECT; -- aktuelle Verbindung
EXEC SQL DISCONNECT connname;
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 13: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/13.jpg)
Autocommit
Precompiler-Option
In der Standardkonfiguration wird kein automatisches COMMIT
ausgefuhrt.
Mit Option wie im Backend.
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 14: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/14.jpg)
Befehle mit Hostvariablen (1)
EXEC SQL BEGIN DECLARE SECTION;
int v1;
char v2[100];
EXEC SQL END DECLARE SECTION;
v1 = 42;
strcpy(v2, "text");
EXEC SQL INSERT INTO test VALUES (:v1, :v2);
EXEC SQL COMMIT;
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 15: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/15.jpg)
Befehle mit Hostvariablen (2)
EXEC SQL BEGIN DECLARE SECTION;
int v1, ind1;
VARCHAR v2;
EXEC SQL END DECLARE SECTION;
...
EXEC SQL DECLARE foo CURSOR FOR SELECT a, b FROM test;
...
do {
...
EXEC SQL FETCH NEXT FROM foo INTO :v1:ind1, :v2;
...
} while (...);
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 16: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/16.jpg)
Ubersetzt
...
#line 2 "a.pgc"
int v1 , ind1 ;
#line 3 "a.pgc"
struct varchar_v2_1 { int len; char arr[ 40 ]; } v2 ;
/* exec sql end declare section */
#line 4 "a.pgc"
...
/* declare foo cursor for select a , b from test */
#line 6 "a.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "declare foo cursor for select a , b from test", ... }
#line 7 "a.pgc"
...
do {
...
{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "fetch next from foo", ECPGt_EOIT,
ECPGt_int,&(v1),(long)1,(long)1,sizeof(int),
ECPGt_int,&(ind1),(long)1,(long)1,sizeof(int),
ECPGt_varchar,&(v2),(long)40,(long)1,sizeof(struct varchar_v2_1),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT);}
#line 11 "a.pgc"
...
} while (...);
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 17: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/17.jpg)
Fehlerbehandlung: Callbacks
EXEC SQL WHENEVER SQLERROR STOP;
EXEC SQL WHENEVER SQLWARNING SQLPRINT;
EXEC SQL WHENEVER SQLERROR CALL func();
EXEC SQL WHENEVER NOT FOUND DO BREAK;
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 18: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/18.jpg)
Migrationen
EXEC SQL CONNECT
SQL-Migration
Variablen
Anpassungen am Prakompiler moglich
Kompatibilitatsschichten
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 19: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/19.jpg)
Geschichte
Linus Tolke
Import nach Postgres Anfang 1998
Kompatibilitat 2003
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 20: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/20.jpg)
Aktuelle Versionen
Prakompiler 4.6.0
Library 6.2
Typlibrary 3.1
Kompatibilitatslibrary 3.2
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 21: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/21.jpg)
Weiterentwicklung
Kontinuierlich
Performance, z.B. Auto-Prepare
Standardfeatures, z.B. SQLDA
Kompatibilitat!
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL
![Page 22: Embedded SQL in PostgreSQL · PDF fileEmbedded SQL in PostgreSQL Dr. Michael Meskes, michael.meskes@credativ.de 7. Dezember 2010 Dr. Michael Meskes, michael.meskes@credativ.de Embedded](https://reader031.fdocuments.us/reader031/viewer/2022021816/5a782bf87f8b9ad22a8eb335/html5/thumbnails/22.jpg)
Wir brauchen SIE!
Anregungen?Feedback?Wunsche?
Dr. Michael Meskes, [email protected] Embedded SQL in PostgreSQL