/* Declarations */ #include #include #include /* Declare section for host variables */ EXEC SQL BEGIN DECLARE SECTION; VARCHAR userid[20]; VARCHAR passwd[20]; int empno; VARCHAR ename[15]; float sal; float min_sal; EXEC SQL END DECLARE SECTION; /* Load SQL Communication Area */ EXEC SQL INCLUDE SQLCA.H; main() /* Main program */ { int retval; /* Catch errors */ EXEC SQL WHENEVER SQLERROR GOTO error; /* Connect to Oracle as SCOTT/TIGER; both are host variables */ /* of type VARCHAR; Account and Password are specified explicitly */ strcpy(userid.arr,"SCOTT"); /* userid.arr := "SCOTT" */ userid.len=strlen(userid.arr); /* uid.len := 5 */ strcpy(passwd.arr,"TIGER"); /* passwd.arr := "TIGER" */ passwd.len=strlen(passwd.arr); /* passwd.len := 5 */ EXEC SQL CONNECT :userid IDENTIFIED BY :passwd; printf("Connected to ORACLE as: %s\n\n", userid.arr); /* Enter minimum salary by user */ printf("Please enter minimum salary > "); retval = scanf("%f", &min_sal); if(retval != 1) { printf("Input error!!\n"); EXEC SQL ROLLBACK WORK RELEASE; /* Disconnect from ORACLE */ exit(2); /* Exit program */ } /* Declare cursor; cannot occur in declare section! */ EXEC SQL DECLARE EMP_CUR CURSOR FOR SELECT EMPNO,ENAME,SAL FROM EMP WHERE SAL>=:min_sal; /* Print Table header, run cursor through result set */ printf("Empployee-ID Employee-Name Salary \n"); printf("--------------- ----------------- -------\n"); EXEC SQL OPEN EMP_CUR; EXEC SQL FETCH EMP_CUR INTO :empno, :ename, :sal; /* Fetch 1.tuple */ while(sqlca.sqlcode==0) { /* are there more tuples ? */ ename.arr[ename.len] = '\0'; /* "End of String" */ printf("%15d %-17s %7.2f\n",empno,ename.arr,sal); EXEC SQL FETCH EMP_CUR INTO :empno, :ename, :sal; /* get next tuple */ } EXEC SQL CLOSE EMP_CUR; /* Disconnect from database and terminate program */ EXEC SQL COMMIT WORK RELEASE; printf("\nDisconnected from ORACLE\n"); exit(0); /* Error Handling: Print error message */ error: printf("\nError: %.70s \n",sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK WORK RELEASE; exit(1); }