#include #include #define TRUE 1 #define FALSE 0 EXEC SQL BEGIN DECLARE SECTION; VARCHAR uid[20]; VARCHAR pwd[20]; VARCHAR user_password[1]; char sql_stmt[256]; varchar userid[10], password[15]; int cnumb,cnumbIN; char cname[20]; char city[20]; EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE SQLCA; void sql_error(char msg[]); main() { int loginok=FALSE,logintries=0; do { strcpy((char *)userid.arr, ""); userid.len = strlen((char *)userid.arr); strcpy((char *)password.arr, ""); password.len = strlen((char *)password.arr); EXEC SQL connect :userid identified by :password; if (sqlca.sqlcode == 0) loginok = TRUE; else printf("Connect Failed\n"); logintries++; } while ((!loginok) && (logintries <3)); if ((logintries == 3) && (!loginok)) { printf("Too many tries at signing on!\n"); exit(0); } printf("Enter Customer number: "); scanf("%d",&cnumbIN); EXEC SQL WHENEVER NOT FOUND go to fini; EXEC SQL WHENEVER SQLERROR go to finix; EXEC SQL DECLARE C1 CURSOR FOR select custno, custname, custcity from xcustomers where custno > :cnumbIN order by custcity; EXEC SQL OPEN C1; printf("CUSTOMER NUMBER\t\t\tCUSTOMER NAME\t\t\tCITY\n\n"); for ( ; ; ) { EXEC SQL FETCH C1 INTO :cnumb, :cname, :city; printf("\t%d\t\t\t%20s\t\t%20s\n",cnumb,cname,city); } finix: printf("SQL ERROR ENCOUNTERED%s\n"); if (sqlca.sqlcode < 0) { sql_error("Problem\n"); } fini: EXEC SQL CLOSE C1; EXEC SQL COMMIT WORK RELEASE; /* log off database */ printf("Disconnected from ORACLE user:%s\n", uid.arr); exit(0); } void sql_error(char msg[]) { char err_msg[128]; size_t buf_len, msg_len; EXEC SQL whenever sqlerror continue; printf("\n%s\n", msg); buf_len = sizeof (err_msg); sqlglm(err_msg, &buf_len, &msg_len); printf("%.*s\n", msg_len, err_msg); exit(1); }