/* * bsp-esql.pgc * Beispielprogramm DBS Vorlesung FH Niederrhein * Demonstration von embedded SQL * Autor: Christoph Dalitz * Datum: 23.10.2002 */ #include EXEC SQL INCLUDE sqlca; /* für vorzeitigen Abbruch */ void exit_nicely() { EXEC SQL DISCONNECT; exit(1); } /* Hauptprogramm */ int main() { EXEC SQL BEGIN DECLARE SECTION; char name[50]; double preis; char* sqlcmd; char* dbname; EXEC SQL END DECLARE SECTION; /* Connect */ if (!(dbname = (char*)getenv("PGDATABASE"))) dbname = "template1"; EXEC SQL CONNECT TO :dbname; if (sqlca.sqlcode) { printf("%s\n", sqlca.sqlerrm.sqlerrmc); return 1; } /* Abfrage mit "dynamic SQL" */ sqlcmd = "SELECT name || ':', preis FROM produkt"; EXEC SQL PREPARE stmt FROM :sqlcmd; EXEC SQL DECLARE cursor1 CURSOR FOR stmt; EXEC SQL OPEN cursor1; if (sqlca.sqlcode) { printf("%s\n", sqlca.sqlerrm.sqlerrmc); exit_nicely(); } /* Loop über Ergebnisse */ EXEC SQL WHENEVER NOT FOUND DO break; while (1) { EXEC SQL FETCH cursor1 INTO :name, :preis; printf("%-13s %6.2f Euro\n", name, preis); } /* Alternative: Loop mit reinen C-Mitteln */ while (sqlca.sqlcode == 0) { EXEC SQL FETCH cursor1 INTO :name, :preis; if (sqlca.sqlcode) break; printf("%-13s %6.2f Euro\n", name, preis); } /* Cursor schliessen */ EXEC SQL CLOSE cursor1; /* Disconnect */ EXEC SQL DISCONNECT; return 0; }