/*********************************************************************************************** * A program elokeszitese a kovetkezo parancsokkal tortenik: * * buci@ablinux:~> proc PARSE=NONE INCLUDE=/usr/include INCLUDE=/usr/include/linux dynamic.pc * buci@ablinux:~> cc -I$ORACLE_HOME/precomp/public -L$ORACLE_HOME/lib/ -lclntsh -o dynamic dynamic.c * * A program a * * bubu@ablinux:~> ./dynamic buci Kis-buci source * * paranccsal indithato. **********************************************************************************************/ #include #include #include void fillin(); void nothing(); void print(); FILE *usage(); main(argc, argv) int argc; char *argv[]; { FILE *fp; EXEC SQL BEGIN DECLARE SECTION; char *uid; char *name; char *status; char *source; long summa = 0; struct {char name[20]; char status[30];} emp; char buffer[1024]; EXEC SQL END DECLARE SECTION; if(!(fp = usage(argc, argv, &uid))) { fprintf(stderr, "usage: dynamic login passwd inserts\n"); return 256; } EXEC SQL WHENEVER SQLERROR GOTO hiba; EXEC SQL CONNECT :uid; Exec Sql Whenever Sqlerror Do print(); Exec Sql Execute Immediate 'Drop Table infrnd'; Exec Sql Whenever Sqlerror Goto hiba; EXEC SQL Execute Immediate 'Create Table infrnd(name Varchar2(20), status Varchar2(30))'; /* feltoltjuk az infrnd tablat a megadott file-bol */ Exec Sql Whenever Sqlerror Do print(); while(fgets(buffer, 1024, fp)) { fillin(&name, &status, buffer); Exec Sql Insert Into infrnd Values(:name, :status); } Exec Sql Commit; Exec Sql Whenever Sqlerror Goto hiba; EXEC SQL DECLARE c CURSOR FOR SELECT name, status FROM infrnd ORDER BY name; EXEC SQL OPEN c; EXEC SQL WHENEVER NOT FOUND DO BREAK; EXEC SQL WHENEVER SQLERROR DO nothing(); while (1) { EXEC SQL FETCH c INTO :emp; /* NULL oszlop hibat okoz, ezek nem irodnak ki -> nothing() */ printf("name:%s status:%s\n", emp.name, emp.status); } EXEC SQL WHENEVER NOT FOUND CONTINUE; EXEC SQL WHENEVER SQLERROR GOTO hiba; EXEC SQL CLOSE c; EXEC SQL SELECT COUNT(*) INTO :summa FROM infrnd; printf("summa=%ld\n", summa); return 0; hiba: printf("%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc); return 1; } FILE *usage(argc, argv, login) int argc; char *argv[]; char **login; { FILE *fp; static char connect[40]; if(argc < 3) { return (FILE*)NULL; } (void)sprintf(connect, "%s/%s", argv[1], argv[2]); *login = connect; if(!(fp = fopen(argv[3], "r"))) { fprintf(stderr, "Open failure on file '%s'\n", argv[3]); } return fp; } void nothing() { } void print() { fprintf(stderr, "%.*s\n", /*sqlca.sqlerrm.sqlerrml,*/ sqlca.sqlerrm.sqlerrmc); } void fillin(name, status, buffer) char **name, **status, *buffer; { /* Keressuk a name/status szeparatort ':' */ *name = strtok(buffer, ":"); *status = strtok((char *)NULL, ":"); }