#ifdef __GNUC__ #include #include #include #include #endif #include void sql_error(char *msg); void get_login(char *buf, int len); int main() { char dbLogin[128]; /* Read login and password from stdin and prepare login string for Oracle */ get_login(dbLogin, 128); /* Pri vyskytu chyby zavolej funkci sql_error */ EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--"); EXEC SQL CONNECT :dbLogin; printf("Connected to ORACLE\n"); while (1) { int i; char hledej[62]; memset(hledej, 0, 62); printf("\nHledej knihu:"); hledej[0] = '%'; for (i = 1; i < 59; i++) { char x = getchar(); if (x == '\n' || x == '\r') break; hledej[i] = x; hledej[i+1] = '%'; } if (strlen(hledej) < 2) { break; } printf("\n"); /* Hledej knihu obsahujici retezec hledej */ /* ************************* */ /* Zde doplnte nacteni dat z DB a jejich vypis...*/ while (1) { /* Vypis nalezeneho zaznamu:*/ printf("%2d. %s, isbn %s (id %d)\n", cnt, nazev, isbn, id); } /* Tisk poctu zaznamu po vypsani vsech nalezenych zaznamu */ printf("Nalezeno zaznamu: %d\n\n", cnt); /* *********************** */ } return 0; } void sql_error(char *msg) { char err_msg[512]; unsigned buf_len, msg_len; /* Pri vyskytu chyby pokracuj, tj. ignoruj chybu */ EXEC SQL WHENEVER SQLERROR CONTINUE; printf("\n%s\n", msg); buf_len = sizeof (err_msg); sqlglm(err_msg, &buf_len, &msg_len); /* Zjisti retezec chyby */ printf("%.*s\n", msg_len, err_msg); /* Proved rollback jako zotaveni z chyby a ukonci program */ EXEC SQL ROLLBACK RELEASE; exit(1); } void get_login(char *buf, int len) { char *dbname = "@db10"; char *pwd; char c; int l = 0; /* Length of the user's input */ /* Decrease buffer length (reserve room for slash in login string and db name) */ len -= 1 + strlen(dbname); printf("Login to %s:", dbname); while ((c = getchar()) != 10 && l < len) buf[l++] = c; buf[l++] = '/'; /* Add slash */ buf[l] = '\0'; pwd = getpass("Password:"); strncat(buf, pwd, len - l); free(pwd); strcat(buf, dbname); /* Add db name */ }