up previous

8.2 Embedded SQL

Embedded SQL

Embedded SQL Fehlerbehandlung:

Embedded SQL Forts. Fehlerbehandlung:

Embedded SQL Anmelden bei der Datenbank:

Embedded SQL Abmelden bei der Datenbank:

Embedded SQL Arbeiten in C mit SQL-Anfrageergebnissen:

Bei genau einem Ergebnistupel: mit INTO arbeiten

Beispiel:
VARCHAR bez;
...
EXEC SQL SELECT artname INTO :bez FROM artikel
WHERE artnr = 15;
if(sqlca.sqlcode == 0) {
bez.arr[bez.len]='\0';
printf( "Bezeichnung zu Artnr. 15 ist %s\n",bez.arr);
}
..}

Embedded SQL Arbeiten in C mit SQL-Anfrageergebnissen:

Embedded SQL Nullwerte:

Embedded SQL

Embedded SQL, PL/SQL Rekursion:

Embedded SQL

Embedded SQL Beispiel1 (dynamisch)

#include<stdio.h>
#include<string.h>

EXEC SQL BEGIN DECLARE SECTION;
VARCHAR userid[9];
VARCHAR passwd[9];
VARCHAR bez[40];
int nummer;
char string1[256];

EXEC SQL END DECLARE SECTION;

EXEC SQL DECLARE s1 STATEMENT;

EXEC SQL DECLARE c CURSOR FOR
SELECT artnr, artname FROM artikel
WHERE artname like '%milch%';

EXEC SQL DECLARE c1 CURSOR FOR s1;

EXEC SQL INCLUDE SQLCA;

int main(void)
{
char user[9];
char passwort[9];
char u_bez[50];

printf( "Ihr Login-Name? ");
scanf( "%s" ,user);
printf( "\nIhr Passwort?" );
scanf("%s" ,passwort);

EXEC SQL WHENEVER SQLERROR GOTO fehler;

strcpy( (char *) userid.arr, user);
userid.len = strlen( (char *) userid.arr);
strcpy( (char *) passwd.arr, passwort);
passwd.len = strlen( (char *) passwd.arr);
EXEC SQL CONNECT :userid IDENTIFIED BY :passwd;
printf( "Welche Artikel (Wort in Art.bezeichnung) interessieren Sie? ");
scanf( "%s ",u_bez);

strcat(string1, "select artnr, artname from artikel where artname like '%");
strcat(string1,u_bez);
strcat(string1,"%'" );

printf( "\n\nIhre Anfrage lautet:\n %s\n" ,string1);

EXEC SQL PREPARE s1 FROM :string1;
printf("\n\nAlle %s-Artikel: \n" ,u_bez);
EXEC SQL EXECUTE s1;
EXEC SQL OPEN c1;

EXEC SQL WHENEVER NOT FOUND GOTO next;

if(sqlca.sqlcode == 0) {
printf( "Artikelnr:\t\tArtikelname\n" );
while(1){
EXEC SQL FETCH c1 INTO :nummer, :bez;
bez.arr[bez.len]='\0';
printf(" %-10d\t\t %s\n" ,nummer,bez.arr);
}
}

next: EXEC SQL CLOSE c1;
printf( "\n\n" );

EXEC SQL WHENEVER NOT FOUND GOTO ende;

printf( "Alle Milch-Artikel: \n" );
EXEC SQL OPEN c;
if(sqlca.sqlcode == 0) {
printf( "Artikelnr:\t\tArtikelname\n" );
while(1){
EXEC SQL FETCH c INTO :nummer, :bez;
bez.arr[bez.len]='\0';
printf( "%-10d\t\t %s\n" ,nummer,bez.arr);
}
}
EXEC SQL CLOSE c;
ende: EXEC SQL COMMIT RELEASE;
return 0;

fehler: printf( "\nFehler! %70s\n",sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK RELEASE;
exit(1);
}

Embedded SQL Beispiel2 (dynamisch)

#include<stdio.h>
#include<string.h>

EXEC SQL BEGIN DECLARE SECTION;
VARCHAR userid[9];
VARCHAR passwd[9];
VARCHAR bez[40];
int nummer;
char string1[256];
int u_bez;
EXEC SQL END DECLARE SECTION;

EXEC SQL DECLARE s1 STATEMENT;
EXEC SQL DECLARE c1 CURSOR FOR s1;

EXEC SQL INCLUDE SQLCA;

int main(void)
{
char user[9];
char passwort[9];

.........

printf( "Welcher Artikel (Artikelnr) interessiert Sie? " );
scanf( "%d ",&u_bez);

EXEC SQL PREPARE s1 FROM 'select artnr, artname from artikel where artnr = :u_bez';

printf( "\n\nArtikel: \n" );
EXEC SQL EXECUTE s1 USING :u_bez;
EXEC SQL OPEN c1;

EXEC SQL WHENEVER NOT FOUND GOTO ende;

if(sqlca.sqlcode == 0) {
printf( "Artikelnr:\t\tArtikelname\n");
while(1){
EXEC SQL FETCH c1 INTO :nummer, :bez;
bez.arr[bez.len]='\0';
printf( "%-10d\t\t %s\n" ,nummer,bez.arr);
}
}

EXEC SQL CLOSE c1;
printf( "\n\n" );

ende: EXEC SQL COMMIT RELEASE;
return 0;

fehler: printf( "\nFehler! %70s\n" ,sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK RELEASE;
exit(1);
}



up previous

Jutta Goeers
Mon Jun 23 17:36:23 MET DST 1997