/* * This example is similar to other examples posted for this course * COMPILE it with * make -f demo_proc.mk cppbuild OBJS=example1.o EXE=example1 * * /home/app/oracle/product/8.0.6/precomp/demo/proc/demo_proc.mk, or * demo_proc.mk is found in ${ORACLE_HOME}/precomp/demo/proc/demo_proc.mk * * you can use it for your own programs * */ #include #include #include #include #include void exit_nicely(const char *msg) { printf("%s\n", msg); printf("Error code %d\n", sqlca.sqlcode); char error_message[1024]; size_t buffer_length, message_length; buffer_length = sizeof(error_message); sqlglm(error_message, &buffer_length, &message_length); printf("%.*s\n", message_length, error_message); EXEC SQL ROLLBACK release; exit (-1); } EXEC SQL INCLUDE sqlca; int main() { EXEC SQL BEGIN DECLARE SECTION; VARCHAR table_name[30]; int pct_used; char username[15]; char password[15]; EXEC SQL END DECLARE SECTION; printf("username: "); scanf("%s", username); printf("password: "); system("stty -echo"); scanf("%s", password); system("stty echo"); printf("\n"); EXEC SQL CONNECT :username identified by :password; if (sqlca.sqlcode) { fprintf(stderr, "error connecting %d\n", sqlca.sqlcode); exit(-1); } EXEC SQL DECLARE table_cursor CURSOR FOR SELECT table_name, pct_used FROM user_tables; if (sqlca.sqlcode) { fprintf(stderr, "error in query %d\n", sqlca.sqlcode); exit(-1); } EXEC SQL set transaction read only; if (sqlca.sqlcode < 0) { exit_nicely("problem with set transaction"); } EXEC SQL open table_cursor; if (sqlca.sqlcode < 0) { exit_nicely("problem opening cursor"); } EXEC SQL FETCH table_cursor INTO :table_name, :pct_used; while (sqlca.sqlcode == 0) { printf("%s %d\n", table_name.arr, pct_used); EXEC SQL FETCH table_cursor INTO :table_name, :pct_used; } if (sqlca.sqlcode < 0) { exit_nicely(""); } EXEC SQL close table_cursor; EXEC SQL COMMIT RELEASE; if (sqlca.sqlcode) { fprintf(stderr, "error disconnecting\n"); exit(-1); } }