오라클 커서 예제
#include <stdio.h>#include <string.h>#include <stdlib.h>EXEC SQL BEGIN DECLARE SECTION;VARCHAR username[20];VARCHAR password[20];VARCHAR connect_string[200];int id;VARCHAR first_name[20];VARCHAR email[200];char phone_number[14];int salary;EXEC SQL END DECLARE SECTION;EXEC SQL INCLUDE sqlca;void sql_error();main(){strcpy(username.arr, "HR");username.len = strlen(username.arr);strcpy(password.arr, "password");password.len = strlen(password.arr);strcpy(connect_string.arr, "//localhost:1521/ORCLPDB1");connect_string.len = strlen(connect_string.arr);EXEC SQL WHENEVER SQLERROR DO sql_error();EXEC SQL CONNECT : username IDENTIFIED BY : password USING : connect_string;printf("\nConnected to ORACLE as user:%s\n", username.arr);EXEC SQL DECLARE cur CURSOR FORSELECT first_name,email, phone_number, salary FROM employees WHERE employee_id < 200;EXEC SQL OPEN cur;for (;;){EXEC SQL WHENEVER NOT FOUND DO break;EXEC SQL FETCH curINTO : first_name,: email,: phone_number,: salary;first_name.arr[first_name.len] = '\0';email.arr[email.len] = '\0';printf("%s\t%s\t%s\t%d\n", first_name.arr, email.arr, phone_number, salary);}EXEC SQL CLOSE cur;exit(0);}void sql_error(){EXEC SQL WHENEVER SQLERROR CONTINUE;printf("\nORACLE error detected:\n");printf("\n%.70s\n", sqlca.sqlerrm.sqlerrmc);EXEC SQL ROLLBACK WORK RELEASE;exit(1);}파일을 docker로 복사하기.
docker cp f:\temp_study\oracle\employees.pc oracle-db:/home/oracle/source.pc 파일 빌드하기
proc iname=employees.pc.c 파일 빌드하기gcc -o sample sample.c -L$ORACLE_HOME/lib -I$ORACLE_HOME/precomp/public -lclntsh -lpthread -ldl -lm