/****** Second Sample program for SQL embedded in C. This program prints the parts whose weight is larger than 10 to the screen, ordered by descending part names. The use of cursors is demonstrated. ******/ #include EXEC SQL BEGIN DECLARE SECTION; char oracleid = '/'; VARCHAR part_num[6], part_name[16], part_color[16], part_city[16]; int part_weight; EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE sqlca; void sql_error(); main() { EXEC SQL WHENEVER SQLERROR DO sql_error(); EXEC SQL CONNECT :oracleid; EXEC SQL DECLARE cursor_parts CURSOR FOR SELECT * FROM PARTS WHERE WEIGHT > 10 ORDER BY PNAME; EXEC SQL OPEN cursor_parts; EXEC SQL WHENEVER NOT FOUND GOTO notfound; printf("\nP# PNAME COLOR WEIGHT CITY\n"); printf("----- --------------- --------------- ---------- ---------------\n"); while (1) { EXEC SQL FETCH cursor_parts INTO :part_num, :part_name, :part_color, :part_weight, :part_city; part_num.arr[part_num.len] = '\0'; part_name.arr[part_name.len] = '\0'; part_color.arr[part_color.len] = '\0'; part_city.arr[part_city.len] = '\0'; printf("%-5s %-15s %-15s %10d %-15s\n", part_num.arr, part_name.arr, part_color.arr, part_weight, part_city.arr); } notfound: EXEC SQL CLOSE cursor_parts; EXEC SQL COMMIT WORK RELEASE; return(0); } void sql_error() { EXEC SQL WHENEVER SQLERROR CONTINUE; fprintf(stderr, "\nOracle error occured:\n"); fprintf(stderr, "%.70s\n", sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK RELEASE; exit(1); }