rendered paste body#include <stddef.h> // Standardheader#include <stdio.h> // Standardheader#include <stdlib.h>void ErrorHandler (void) { // im Fehlerfalle printf("%li %li %li\n", SQLCODE, SQLERRD1, SQLERRMC); // Ausgabe von} // Fehlermeldungenint main ( int argc, char** argv, char** envp) { exec SQL BEGIN DECLARE SECTION; // Deklarationen-Start char server[] = "arnold.uni"; // Server + DB char loginPasswort[] = "erika.mustermann"; // User + Passwort int persnr; // Personalnummer char name[20]; // Name char rang[3]; // Rang int raum; // Raum char gebdatum[17]; // Geburtsdatum short raum_ind; // Raum-Indikator char eingaberang[3]; // Eingabe vom User EXEC SQL END DECLARE SECTION; // Deklarationen-Ende EXEC SQL WHENEVER SQLERROR CALL ErrorHandler(); // Fehlermarke EXEC SQL CONNECT TO :server USER :loginPasswort; // Verbindung aufbauen if (SQLCODE == 0) printf("Verbindung aufgebaut!\n");// Erfolg else { printf("Keine Verbindung\n"); return (1); } // Misserfolg printf("Bitte Rang eingeben: "); // gewuenschten Rang scanf("%s", eingaberang); // vom user holen printf("Mit Rang %s gespeichert:\n", eingaberang); EXEC SQL DECLARE C1 CURSOR FOR // Cursor vereinbaren SELECT PersNr, Name, Rang, Raum, Gebdatum // SQL-Statement FROM Professoren WHERE Rang = :eingaberang; EXEC SQL OPEN C1; // Cursor oeffnen EXEC SQL FETCH C1 INTO :persnr, :name, :rang, // Versuche eine Zeile :raum INDICATOR :raum_ind, :gebdatum; // zu lesen while (SQLCODE == 0){ // SOLANGE erfolgreich printf("%d %s %s", persnr, name, rang); // Tupel ausgeben if(raum_ind == -1) printf(" ???"); // Platzhalter drucken else printf("%4d", raum); // SONST Raumnr printf(" %s\n", gebdatum); // letztes Attribut EXEC SQL FETCH C1 INTO :persnr, :name, :rang, // naechste Zeile lesen :raum INDICATOR :raum_ind, :gebdatum; } EXEC SQL CLOSE C1; // Cursor schliessen EXEC SQL DISCONNECT ALL; // Verbindung beenden return (0);}