Pro*C는 Oracle의 C 기반의 프로그래밍 언어로, 데이터베이스와의 상호작용을 매우 효율적으로 수행할 수 있도록 돕습니다. 이 글에서는 Pro*C 프로그램의 기본적인 설정, 간단한 SELECT 쿼리 실행, 그리고 결과 출력을 다룰 것입니다.
1. Pro*C 소개
Pro*C는 Oracle 데이터베이스와 C언어 간의 인터페이스를 제공합니다. 이는 C 프로그램 내에서 SQL 쿼리를 작성하고 실행할 수 있게 도와줍니다. Pro*C 프로그램은 일반 C 프로그램과 거의 유사하지만, SQL 구문이 포함되어 있다는 점에서 차별화됩니다.
2. Pro*C 환경 설정
Pro*C 프로그램을 작성하기 전에, 개발 환경을 설정해야 합니다. 일반적으로 필요한 구성 요소는 다음과 같습니다:
- Oracle 데이터베이스 및 클라이언트 설치
- C 컴파일러 (예: GCC)
- Pro*C precompiler
환경 설정이 완료되었다면, Pro*C 소스를 작성할 준비가 되었습니다.
3. 첫 번째 Pro*C 프로그램
3.1 기본 연결
우선 Oracle 데이터베이스와의 연결을 설정해야 합니다. 다음은 기본적인 연결을 위한 코드 샘플입니다:
#include <stdio.h>
#include <stdlib.h>
#include <sqlca.h> // SQLCA 구조체를 포함해야 함
#include <sqlcpr.h> // SQL 실행을 위한 헤더
EXEC SQL BEGIN DECLARE SECTION;
char *username = "your_username"; // 사용자 이름
char *password = "your_password"; // 비밀번호
char *db = "your_db"; // 데이터베이스 이름
EXEC SQL END DECLARE SECTION;
int main() {
// Oracle 데이터베이스에 연결
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :db;
if (sqlca.sqlcode != 0) {
printf("데이터베이스 연결 실패: %d\n", sqlca.sqlcode);
return 1;
}
printf("데이터베이스에 성공적으로 연결되었습니다.\n");
// 연결 종료
EXEC SQL COMMIT WORK RELEASE;
return 0;
}
3.2 간단한 SELECT 문 실행
연결이 성공적으로 이루어진 후, 간단한 SELECT 문을 실행해보겠습니다. 예를 들어, EMPLOYEES 테이블에서 직원의 이름과 급여를 조회하는 프로그램이 있습니다:
#include <stdio.h>
#include <stdlib.h>
#include <sqlca.h>
#include <sqlcpr.h>
EXEC SQL BEGIN DECLARE SECTION;
char *username = "your_username"; // 사용자 이름
char *password = "your_password"; // 비밀번호
char *db = "your_db"; // 데이터베이스 이름
char employee_name[50]; // 직원 이름
double salary; // 급여
EXEC SQL END DECLARE SECTION;
int main() {
// 데이터베이스에 연결
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :db;
if (sqlca.sqlcode != 0) {
printf("데이터베이스 연결 실패: %d\n", sqlca.sqlcode);
return 1;
}
// SELECT 문 실행
EXEC SQL SELECT name, salary INTO :employee_name, :salary FROM EMPLOYEES WHERE ROWNUM = 1;
if (sqlca.sqlcode == 0) {
printf("직원 이름: %s, 급여: %.2f\n", employee_name, salary);
} else {
printf("조회 실패: %d\n", sqlca.sqlcode);
}
// 연결 종료
EXEC SQL COMMIT WORK RELEASE;
return 0;
}
3.3 결과 출력
위의 SELECT 문은 EMPLOYEES 테이블에서 첫 번째 직원의 이름과 급여를 출력합니다. 결과가 성공적으로 출력되면 경과된 시간이 아닌 다른 정보를 추가로 출력할 수 있습니다. 예를 들어, 아래와 같이 쿼리를 수정하여 전체 직원 목록을 출력할 수 있습니다:
#include <stdio.h>
#include <stdlib.h>
#include <sqlca.h>
#include <sqlcpr.h>
EXEC SQL BEGIN DECLARE SECTION;
char *username = "your_username"; // 사용자 이름
char *password = "your_password"; // 비밀번호
char *db = "your_db"; // 데이터베이스 이름
char employee_name[50]; // 직원 이름
double salary; // 급여
EXEC SQL END DECLARE SECTION;
int main() {
// 데이터베이스에 연결
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :db;
if (sqlca.sqlcode != 0) {
printf("데이터베이스 연결 실패: %d\n", sqlca.sqlcode);
return 1;
}
// 결과 집합을 저장하기 위한 커서 선언
EXEC SQL DECLARE emp_cursor CURSOR FOR
SELECT name, salary FROM EMPLOYEES;
// 커서 열기
EXEC SQL OPEN emp_cursor;
// 결과 집합을 순회하며 출력
while (1) {
EXEC SQL FETCH emp_cursor INTO :employee_name, :salary;
if (sqlca.sqlcode != 0) break; // 더 이상의 데이터가 없으면 종료
printf("직원 이름: %s, 급여: %.2f\n", employee_name, salary);
}
printf("모든 직원 정보 출력 완료.\n");
// 커서 닫기
EXEC SQL CLOSE emp_cursor;
// 연결 종료
EXEC SQL COMMIT WORK RELEASE;
return 0;
}
4. 예제 실행 방법
유닉스 계열 OS의 경우 다음과 같은 명령어를 통해서 Pro*C 프로그램을 컴파일하고 실행할 수 있습니다:
- Pro*C 컴파일러를 사용하여 SQL 문이 포함된 소스를 처리합니다:
proc iname=your_program.pc
- 생성된 C 소스를 컴파일합니다:
gcc your_program.c -o your_program -I$ORACLE_HOME/rdbms/public -L$ORACLE_HOME/lib -lclntsh
- 프로그램을 실행합니다:
./your_program
5. 마무리
이글에서는 Pro*C의 기본적인 사용법을 설명했습니다. Oracle 데이터베이스와의 연결, 간단한 SQL 쿼리 실행, 그리고 결과 출력까지의 과정이 포함되어 있습니다. Pro*C는 강력한 데이터베이스 프로그래밍 도구이므로 복잡한 비즈니스 로직을 구현하는 데 유용합니다. 더 깊이 있는 기능이나 복잡한 예제는 Oracle 공식 문서나 Pro*C 관련 자료들을 통해 찾아보길 권장합니다.